1.初始化
multiset<int> set1; //創建空set
multiset<int> set2(set1); //拷貝構造
multiset<int> set3(set1.begin(), set1.end()); //迭代器構造
multiset<int> set4(arr, arr+5); //數組構造
multiset<int> set5(move(set2)); //移動構造
multiset<int> set6 {1,2,3,4};//使用initializer_list初始化
multiset<int, greater<int>> set7; //創建降序排序的set
2.常用操作
set1.find(2); //查找2,返回第一個找到的迭代器,失敗返回end()
set1.count(2); //返回2出現的次數,0或其他
set1.emplace(5); //插入5,返回指向插入元素的迭代器,不支持像insert那樣一次插入多個元素
set1.insert(2); //插入元素2,返回指向插入元素的迭代器
set1.insert(set1.end(),2);//指定插入位置,如果位置正確會減少插入時間
set1.insert(set2.begin(), set2.end());//使用範圍迭代器插入
set1.insert({1,2,3}); //插入initializer_list
set1.erase(2); //刪除操作,成功返回刪除的元素個數,失敗返回0
set1.erase(set1.find(2)); //刪除第一個找到的元素,成功返回下一個元素的迭代器
set1.erase(set1.begin(), set1.end()); //刪除set1的所有元素,返回指向end迭代器
set1.empty(); //是否爲空
set1.size(); //大小
multiset<int>::iterator it = set1.begin(); //返回指向set1首元素的迭代器
multiset<int>::const_iterator c_it = set1.cbegin(); //返回指向set1首元素的常量迭代器
multiset<int>::reverse_iterator r_it = set1.rbegin(); //返回一個逆序迭代器
multiset<int>::const_reverse_iterator cr_it = set1.crbegin(); //返回一個逆序迭代器
multiset<int>::iterator it = set1.lower_bound(2); //返回鍵值大於等於給定元素的第一個元素
multiset<int>::iterator it = set1.upper_bound(2); //返回鍵值大於給定元素的第一個元素
pair<multiset<int>::iterator, multiset<int>::iterator> it = set1.equal_range(2);//返回一個pair,pair裏面第一個變量是lower_bound返回的迭代器,第二個迭代器是upper_bound返回的迭代器
set1.clear(); //清空
3.不常用操作
set1.emplace_hint(set1.end(),12);//提示插入的位置,如果指定的位置是真正要插入的位置,會減少插入時間
set1.swap(set2); //交換,要求兩個set的類型相同
set1.get_allocator(); //返回分配器
set1.max_size(); //返回可以容納的最大元素個數
multiset<int>::key_compare cmp = set1.key_comp();//返回set1比較值大小的函數,接收兩個值作爲參數,<則返回true,同value_comp()
multiset<int>::value_compare cmp1 = set1.value_comp();//返回set1比較值大小的函數,接收兩個值作爲參數,<則返回true
set1.merge(set2); //合併兩個set,C++17支持
4.遍歷
- 迭代器
for(multiset<int>::iterator it = set1.begin(); it != set1.end(); ++it) cout << *it << " ";
- C11
for(int x : set1) cout << x << " ";