C++ set and multiset
簡單來說 set 是一組有序數的集合,集合裡的元素沒有重複的,而 multiset 則允許元素重複。因此multiset在一些操作上要注意和set的區別。
定義
template < class T, // set::key_type/value_type
class Compare = less<T>, // set::key_compare/value_compare
class Alloc = allocator<T> // set::allocator_type
> class set;
template < class T, // multiset::key_type/value_type
class Compare = less<T>, // multiset::key_compare/value_compare
class Alloc = allocator<T> > // multiset::allocator_type
> class multiset;
set<int> setNum;// 定義一個包含int型的set
multiset<int> msetsNum; //定義一個包含int型的multiset
預設情況下,是按less比較符號(在functional標頭檔案)比較元素大小的,所以set裡元素是從小到大排序的;如果想要從大到小排序,可以使用greater:
set<int, greater<int>> setNum;// 定義一個包含int型的set
multiset<int, greater<int>> msetsNum; //定義一個包含int型的multiset
插入元素和刪除元素
插入單個元素的操作都一樣:
single element (1)
iterator insert (const value_type& val);
iterator insert (value_type&& val);
with hint (2)
iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, value_type&& val);
range (3)
template <class InputIterator>
void insert (InputIterator first, InputIterator last);
initializer list (4)
void insert (initializer_list<value_type> il);
刪除元素的時候注意了,刪除元素可以指定要刪除的元素值或者迭代器。對於set來說,每個元素不重複,指定刪除元素值或者迭代器都一樣;但是對於multiset來說,指定元素的值會所有等於該元素的值刪除掉,而指定迭代器只會把該迭代器指定的元素刪除掉!
cout << "multiset set erase example" << endl;
multiset<int, greater<int>> msets{ 1, 1, 3, 3, 2, 2 };
for_each( msets.begin(), msets.end(),
[]( int i ) {cout << i << " "; } );
cout << endl;
//erase the first element
msets.erase( msets.begin() );
for_each( msets.begin(), msets.end(),
[]( int i ) {cout << i << " "; } );
cout << endl;
//erase the last element
msets.erase( --msets.end() );//or msets.erase( std::prev(msets.end()) ) or msets.erase( (++msets.rbegin()).base() );
for_each( msets.begin(), msets.end(), []( int i ) {cout << i << " "; } );
cout << endl;
//erase the 2
msets.erase( 2 );
for_each( msets.begin(), msets.end(),
[]( int i ) {cout << i << " "; } );
cout << endl;
輸出:
3 3 2 2 1 1
3 2 2 1 1
3 2 2 1
3 1
相關文章
- C++ 標準庫 std::set std::multiset swap()的使用C++
- 【C++ STL】Set用法C++
- google guava集合之MultisetGoGuava
- C++ set的一些用法C++
- c/c++ 標準庫 map set 插入C++
- oracle 特殊SQL(TABLE( CAST( MULTISET()[zt]OracleSQLAST
- [ABC221H] Count Multiset
- 《STL原始碼剖析》-- stl_multiset.h原始碼
- c++ unordered_map/set自定義物件的hashC++物件
- C++ 學習筆記(1):STL、Vector 與 SetC++筆記
- hdu4268 multiset應用 貪心
- CF1913C Game with Multiset 題解GAM
- C++進階(map+set容器模擬實現)C++
- C++進階(unordered_set+unordered_map模擬實現)C++
- c++ set容器 —構造 賦值 大小 交換 插入 刪除 程式碼示例C++賦值
- Set
- set /?
- UVA 11020 Efficient Solutions+multiset的應用
- 第十三篇:multimap容器和multiset容器中的find操作
- lombok get/set 與 JavaBean get/setLombokJavaBean
- SET NEWNAME FOR
- set -e
- Jet Set
- c/c++ 標準庫 set 自定義關鍵字型別與比較函式C++型別函式
- Vue.set與vue.$set的使用Vue
- set pause on,set pagesize N小知識點。
- [Javascript] Perform Set Operations using JavaScript Set MethodsJavaScriptORM
- Codeforces Round #367 (Div. 2) D——Vasiliy's Multiset(異或字典樹)
- 演算法學習之路|用C++刷演算法會用到的STL(二)——set演算法C++
- alter system set event和set events的區別
- Redis 入門 - 3(集合 set、有序集合 sort set)Redis
- 論文解讀(GMT)《Accurate Learning of Graph Representations with Graph Multiset Pooling》
- JavaScript Set物件JavaScript物件
- Set delete() 方法delete
- RMAN SET NEWNAME
- oracle set eventsOracle
- alter session setSession
- 【轉】SET SERVEROUTPUTServer