C++ 中的集合与字典
基本的關聯式容器主要有:set、multiset、map 和 multimap,這四種容器可以分為兩組:map 和 set。
set 可以理解為我們數學中的集合,它可以包含 0 個或多個不重復的數據。map 也是一種集合,它同樣可以包含多個元素,每一個元素由一個鍵值和一個與鍵值相關聯的值組合而成,這樣的元素又稱鍵值對(<key, value>)。
map 容器會根據各個元素的鍵的大小,對所有的元素進行排序,默認會進行升序排序;set 容器也會自行根據各個數據的值的大小進行排序,默認也是升序排序。
在 map 中,各個元素的鍵是不允許重復的。而 multismap 則允許有多個相同鍵的鍵值對。可以這樣理解,multimap 是允許有重復鍵的 map。multiset 和 set 之間的區別,和 multimap 與 map 的區別完全一樣。因為 multiset 和 multimap 可以看做是 set 和 map 的擴展,因此我們將主要介紹 set 和 map。
#include <iostream> #include <set> using namespace std; int main() {set <int > s;s.insert(s.begin(), 9);s.insert(1);s.insert(s.end(),4);s.insert(5);s.insert(6);s.insert(7);s.insert(9);s.insert(0);set <int >::const_iterator itor;for(itor = s.begin (); itor != s.end(); itor++)cout<< *itor<<" ";cout<< endl;itor = s.find( 2 );cout<<"itor=" <<endl;if( itor == s.end() )cout<< "NOT Found 2!" << endl;elsecout<< "Found 2 in set!" << endl;itor = s.find( 5 );if( itor == s.end() )cout<< "NOT Found 5!" << endl;elsecout<< "Found 5 in set!" << endl;return 0;} #include <iostream> #include <map> using namespace std; int main() {map< char, int > m;m[ 'a' ] = 1;m[ 'b' ] = 2;m[ 'c' ] = 3;m[ 'd' ] = 4;m[ 'e' ] = 1;m[ 'f' ] = 2;m[ 'g' ] = 3;m[ 'h' ] = 4;m[ 'a' ] = 0;map< char, int >::iterator itor;for(itor = m.begin(); itor != m.end(); itor++)cout << itor->first << " -- " << itor->second <<endl;return 0; }本例是一個 map 容器的示例程序,我們直接看主函數。主函數一開始定義了一個 map 容器實例 m,map<char, int>m;語句中 char 表示鍵的數據類型,int 表示與鍵值對應的值的數據類型。
我們用字符來作為鍵,鍵在 map 中是不允許出現重復的,但是與鍵對應的值 value 可以重復,例如 m[‘a’] 和 m[‘e’] 相同。但是如果鍵值出現相同,則以最后一次出現的作為結果,例如本例中一開始“m[‘a’] = 1;”,在后面又出現“m[‘a’] = 0;”,此時不會有語法錯誤,這兩句可以理解為“m[‘a’] = 1;”是給“m[‘a’]”賦初值,而“m[‘a’] = 0;”則可以理解為將“m[‘a’]”的值修改為 0。
遍歷 map 時同樣是使用迭代器,在函數中我們定義了一個 itor 迭代器,由于 map 中是由元素對組成的,包含兩個元素,因此遍歷方法與前面所介紹的容器稍有不同,前面的容器用 *itor 就可以直接獲得所需要的元素,而 map 容器則需要通過 itor->first 訪問鍵值,并用 itor->second 訪問與鍵值對應的值。
例 2 最終運行結果如下:
總結
以上是生活随笔為你收集整理的C++ 中的集合与字典的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ STL算法
- 下一篇: C++基本序列式容器效率比较