c++: 關聯容器的使用方法
阿新 • • 發佈:2018-11-10
關聯容器有:map、multimap、set、multiset
map的元素是pair型別、<關鍵字,值>對,其中關鍵字是const,不能修改,值可以修改。
set的元素是關鍵字,const,只能訪問、不能修改。
multimap 和 multiset 都允許多個元素有相同的關鍵字。
當用一個迭代器遍歷一個 map、multimap、set、multiset 時,迭代器會按照關鍵字升序遍歷元素。
通常,不對關聯容器使用泛型演算法,因為它們的關鍵字都是const,無法修改,而且關聯容器的元素不能通過他們的關鍵字快速查詢。
使用例項:
#include<map> #include<set> using namespace std; // 列印map,預設升序列印 void printmap(const map<string, int>&map) { for_each(map.begin(), map.end(), [](const pair<string, int>&i) {cout << i.first << " : " << i.second << endl;}); cout << endl; } // 列印set,預設升序列印 void printset(const set<int>&set) { for_each(set.begin(), set.end(), [](const int&i) {cout << i << " " ; }); cout << endl; } int main() { map<string, int> imap = {{"xiaoming", 12},{"Mike", 26},{"linda", 10}}; //修改map的值 auto it = imap.begin(); it->second = 99; //輸出變數it的型別名 cout << typeid(it).name() << endl; //給map新增元素有四種方法,insert()的返回值ret是pair型別, //pair的first成員ret.first是一個迭代器,指向具有給定關鍵字的元素 //pair的second成員ret.second是個bool值,表示元素插入成功與否 //ret.first-> : 解引用此迭代器,提取map中的元素,元素也是一個pair //ret.first->second :map中元素的值部分 //++ret.first->second :遞增此值 imap.insert({"joe", 22}); imap.insert(make_pair("liu", 33)); imap.insert(pair<string, int>("zhang", 44)); imap.insert(map<string, int>::value_type("xu", 55)); //列印map printmap(imap); set<int> iset = {3,1,8,6,9,0,7,4}; //給set新增元素:insert(一堆迭代器or初始化列表),若插入已存在的元素,則對容器無影響 iset.insert({11,22,33,11,22,33}); vector<int> ivec = {23,45,67,67,78}; iset.insert(ivec.begin(), ivec.end()); //列印set printset(iset); system("pause"); return 0; }
列印的結果:
Mike : 26
linda : 10
xiaoming : 12
0 1 3 4 6 7 8 9