當(dāng)前位置: 首頁(yè)IT技術(shù) → STL中的set/multiset實(shí)操總結(jié)

STL中的set/multiset實(shí)操總結(jié)

更多
(1)使用set/multiset之前必須包含頭文件<set>:#include<set>

(2)namespace std{
template <class T, class Compare = less<T>,
class Allocator = allocator<T> >
class set;
template <class T, class Compare = less<T>,
class Allocator = allocator<T> >
class multiset;
}
只要是assignable、copyable、comparable的型別T都可以成為set或multiset的元素型別。
set/multiset的排序準(zhǔn)則必須是strict weak ordering其意義是:1必須是反對(duì)稱的,對(duì)判斷式op而言,如果op(x,y)為真則op(y,x)為假。2必須是可傳遞的,如果op(x,y)為真且op(y,z)為真則op(x,z)。3必須是非自反的,op(x,x)永遠(yuǎn)為假。

(3)set/multiset通常都是以平衡二叉樹來(lái)實(shí)現(xiàn)的,事實(shí)上set/multiset的實(shí)現(xiàn)版本大多以紅黑樹來(lái)實(shí)現(xiàn),它保證節(jié)點(diǎn)安插時(shí)最多只會(huì)做兩個(gè)重新連接動(dòng)作,而且到達(dá)某一元素的最長(zhǎng)路徑最多只是最短路徑深度的兩倍。

(4)set/multiset的操作函數(shù):
set c 產(chǎn)生一個(gè)空set/multiset
set c(op) 以op為排序準(zhǔn)則產(chǎn)生一個(gè)空set/multiset
set c1(c2) 產(chǎn)生某一個(gè)set/multiset的副本
set c(beg, end) 以區(qū)間[beg, end)內(nèi)的元素產(chǎn)生一個(gè)set/multiset
set c(beg, end, op) 以op為排序準(zhǔn)則,以區(qū)間[beg, end)內(nèi)的元素產(chǎn)生一個(gè)set/multiset
c.~set() 銷毀所有元素,釋放內(nèi)存
其中set可為下列形式:set<Elem>、set<Elem, op>、multiset<Elem>、multiset<Elem, op>

c.size() 返回當(dāng)前的元素?cái)?shù)量
c.empty() 判斷c是否為空
c.max_size() 返回可容納的元素最大數(shù)值
c1 compare c2 compare可為==,!=,<,>,<=和>=

c.count(elem) 返回“元素值為elem”的元素個(gè)數(shù)
c.find(elem) 返回“元素值為elem”的第一個(gè)元素的迭代器,如果找不到就返回end()
c.lower_bound(elem) 返回elem的第一個(gè)可安插位置,也就是“元素值>=elem”的第一個(gè)元素位置
c.upper_bound(elem) 返回elem的最后一個(gè)可安插位置,也就是“元素值>elem”的第一個(gè)元素位置
c.equal_range(elem) 返回elem的第一個(gè)和最后一個(gè)位置,也就是“元素值==elem”的第一個(gè)元素區(qū)間,返回值為將lower_bound()和upper_bound()的返回值做成一個(gè)pair返回

c1 = c2 將c2全部元素賦值給c1
c1.swap(c2) 將c1和c2元素互換

c.begin() 返回一個(gè)雙向存取迭代器(將元素視為常數(shù)),指向第一個(gè)元素
c.end() 返回一個(gè)雙向存取迭代器(將元素視為常數(shù)),指向最后元素的下一個(gè)位置
c.rbegin() 返回一個(gè)逆向迭代器,指向逆向迭代的第一個(gè)元素
c.rend() 返回一個(gè)逆向迭代器,指向逆向迭代的最后元素的下一個(gè)位置

c.insert(elem) 插入一個(gè)elem副本并返回新元素的位置
c.insert(it, elem) 安插e(cuò)lem副本返回新元素的位置(it是一個(gè)提示指出安插操作的搜尋起點(diǎn))
c.insert(beg, end) 插入?yún)^(qū)間[beg, end)內(nèi)的所有元素副本,無(wú)返回值
c.erase(elem) 移除“與elem相等”的所有元素,返回被移除元素的個(gè)數(shù)
c.erase(it) 移除it位置上的元素,無(wú)返回
c.erase(beg, end) 移除[beg, end)區(qū)間內(nèi)的所有元素,無(wú)返回
c.clear() 將容器清空
set提供如下接口:
pair<iterator, bool> insert(const value_type& elem);
pair結(jié)構(gòu)中的second成員表示安插是否成功;first成員返回新元素的位置或返回現(xiàn)存的同值元素位置
iterator insert(iterator pos_hint, const value_type& elem);
multiset提供如下接口:
iterator insert(const value_type& elem);
iterator insert(iterator pos_hint, const value_type& elem);
熱門評(píng)論
最新評(píng)論
發(fā)表評(píng)論 查看所有評(píng)論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)