與基本容器相比,關聯容器更注重快速和高效地檢索數據的能力。這些容器是根據鍵值(key)來檢索數據的,鍵可以是值也可以是容器中的某一成員。這一類中的成員在初始化後都是按一定順序排好序的。
set和multiset 容器類(集和多集):#include<set>
<set> 內部它實現: 紅黑樹
插入刪除查找復雜度log(n)
其中所包含的元素的值是唯一的(map)
<multiset> 允許重復元素
集合(set)是一個容器,它其中所包含的元素的值是唯一的。這在收集一個數據的具體值的時候是有用的。集合中的元素按一定的順序排列,並被作為集合中的實例。如果你需要一個鍵/值對(pair)來存儲數據,map(也是一個關聯容器,後面將馬上要講到)是一個更好的選擇。一個集合通過一個鏈表來組織,在插入操作和刪除操作上比向量(vector)快,但查找或添加末尾的元素時會有些慢。
在集合中,所有的成員都是排列好的。如果先後往一個集中插入:12,2,3,123,5,65
則輸出該集合為:2,3,5,12,65,123
集合(set)與多集(multiset)的區別是:set支持唯一鍵值,set中的值都是特定的,而且只出現一次;而multiset中可以出現副本鍵,同一值可以出現多次。
set和multiset的模板參數
在有些編譯器的具體實現中,第三個參數可以省略。第二個參數使用了合適形式的迭代器為鍵定義了特定的關系操作符,並用來在容器中遍歷值時建立順序。集合的迭代器是雙向,同時也是常量的,所以迭代器在使用的時候不能修改元素的值。
set定義了三個構造函數:
1、默認構造函數
explicit set(const Compare&=compare());
如:set<int,less<int> > set1;
less<int>是一個標准類,用於形成降序排列函數對象。升序排列是用greater<int>。
2、通過指定某一預先定義的區間來初始化set對象的構造函數
template<class InputIterator> set(InputIterator, InputIterator, const Compare&=compare());
如:set<int ,less<int> >set2(vector1.begin(),vector1.end());
3、復制構造函數
set(const set<Key,Compare&>);
如:set<int ,less<int>>set3(set2);
set容器詳解:
頭文件 #include <set>
定義變量 set <int> myset;
主要成員函數:
multiset操作詳解:
頭文件 #include <set>
定義變量 multiset <int> mymulset;
主要成員函數
multiset用法:
Code1
Code2
multiset舉例:
View Code