關聯容器
無序關聯容器->鏈式哈希表 增刪查 O(1)
set:集合key map:映射表[key,value]
unordered_set 單重集合 不允許重復
unordered_multiset 多重集合
unordered_map 單重映射表
unordered_multimap 多重映射表
有序關聯容器=》紅黑樹 增刪查O(log2N)
set
multiset
map
multimap
unordered_set<int> set1
for(int i=0;i<50;i++){
set1.insert(i);
}
for(int m=0;m<50;m++){
set1.insert(m);
}
cout<<se1.size()<<endl;//容器個數, unordered_set<int> 不允許重復值
cout<<set1.count(5)<<endl;//值為5的個數
auto it1=set1.begin();
for(;it1!=set1.end();++it1){
cout<<*it1<<endl;
}
set1.erase(10);//洗掉10的元素,如果連續的洗掉 要記得更新迭代器
it1=set1.find(20);
for(int x : set1){
cout<<x<<endl;
}
unordered_map [key,value]=>打包成 pair
unordered_map<int,string> map1;//不允許重復
map1.insert(make_pair(100,"AAA"));
map1.insert({200,"bbb"});
map1.insert({200,"ccc"});//key 重復了,不會被插進去
cout<<map1.size()<<endl;//包含鍵值對的個數
cout<<map1[100]<<endl;//map 提供了[]的多載函式來查詢,
**注意:**map1[555] 使用中括號來查詢會有一個問題,如果key不存在,那么555這個鍵值會被插入到map中,valu的值會用一個默認值!!!
operator[]會回傳插入值得參考,如下
value & operator[](const K key){
return map.insert[key,string()];
}
所以 map1[999]="ABAB"; 由于999不存在,相當于[999,"ABAB"]被插到map里了
而 map1[100]="MMM"; 由于100key 值存在,相當于 把100的value值給修改了
map1.erase(100);//洗掉Key=100的
auto it1 =map1.find(200);
if(it1!=map1.end()){
cout<<it1->first<<"="<<it1->second<<endl;
}
unordered_map 由于增刪查時間是O(1) 當處理海量資料查重復,去重復的時候,常常會用到它,簡單應用如下圖

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540083.html
標籤:其他
上一篇:<六>無序關聯容器
下一篇:<三>自定義洗掉器
