C++语言基础 —— STL —— 容器与迭代器 —— set 与 multiset
生活随笔
收集整理的這篇文章主要介紹了
C++语言基础 —— STL —— 容器与迭代器 —— set 与 multiset
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【概述】
set 和 multiset?是集合數據容器,通過鏈表進行組織,具體實現采用了紅黑樹的平衡二叉樹的數據結構,兩者均定義在 <set> 頭文件中,其會根據特定的規則,自動將元素排序。
兩者不同在于,set 不允許元素重復,而 multiset 允許元素重復。
在插入操作和刪除操作上比 vector 快,但查找或添加末尾的元素時會有些慢。
【定義】
定義:?set<type> setName、multiset<type> multisetName
- set<type> s:產生一個空的 set/multiset,其中不含任何元素
- set<type> s(op):以 op 為排序準則,生成一個 set/multiset
- set<type> s1(s2):產生某個 set/multiset 的副本,所有元素均被復制
- set<type> s(beg, end):以迭代器的區間 [beg; end] 內的元素產生一個 set/multiset
- set<type> s(beg, end, op):以 op 為排序準則,利用迭代器的區間 [beg; end] 內的元素生成一個 set/multiset
默認情況下,由小到大排序,若想按照自己的方式排序,一般重載小于號
struct type{int x,y;bool operator < (const type &a) const{if(x!=a.x)return x<a.x;return y<a.y;} } set<type> s;【基本操作】
對于 set<type> s 的基本操作有:
- s.size():返回容器大小
- s.empty():返回容器是否為空。
- s.clear():清空容器
- s.count(elem):返回元素值為?elem?的元素的個數
- s.insert(elem) :加入一個?elem?副本,返回新元素位置
- s.erase(elem):移除與?elem?元素相等的所有元素,返回被移除的元素個數
【迭代器操作】
對于?set<type> s 的迭代器 it 的操作有:
- s.begin():返回一個雙向迭代器,指向第一個元素
- s.end():返回一個雙向迭代器,指向最后一個元素的下一?個位置
- s.erase(it):移除迭代器?it 所指位置上的元素,無返回值
- s.lower_bound(elem):返回?elem?的第一個可安插的位置,即元素值?>= elem?的第一個元素位置
- s.upper_bound(elem):返回?elem?的最后一個可安插的位置,即元素值 > elem?的第一個元素的位置
【自定義數據類型】
當要在 multiset 中存儲自定義數據類型時,除了要寫自定義類型的存儲結構外,還要寫一個比較函數 cmp 來告訴 multiset 如何去比較自定義類型。
struct?Node{int?x,y; }; struct cmp{bool operator()(const Node &a,const Node &b){if(a.x==b.x)return a.y<b.y;return a.x<b.x;} }; multiset<Node,cmp> s;?
總結
以上是生活随笔為你收集整理的C++语言基础 —— STL —— 容器与迭代器 —— set 与 multiset的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Charm Bracelet(POJ-3
- 下一篇: C++语言基础 —— STL —— 容器