相關(guān)資訊
本類常用軟件
-
福建農(nóng)村信用社手機銀行客戶端下載下載量:584212
-
Windows優(yōu)化大師下載量:419731
-
90美女秀(視頻聊天軟件)下載量:366966
-
廣西農(nóng)村信用社手機銀行客戶端下載下載量:365708
-
快播手機版下載量:325898
STL中的set/multiset實操總結(jié)
2013/7/23 23:41:19 出處:本站原創(chuàng) 人氣:124次 字號:小 中 大
(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的排序準則必須是strict weak ordering其意義是:1必須是反對稱的,對判斷式op而言,如果op(x,y)為真則op(y,x)為假。2必須是可傳遞的,如果op(x,y)為真且op(y,z)為真則op(x,z)。3必須是非自反的,op(x,x)永遠為假。
(3)set/multiset通常都是以平衡二叉樹來實現(xiàn)的,事實上set/multiset的實現(xiàn)版本大多以紅黑樹來實現(xiàn),它保證節(jié)點安插時最多只會做兩個重新連接動作,而且到達某一元素的最長路徑最多只是最短路徑深度的兩倍。
(4)set/multiset的操作函數(shù):
set c 產(chǎn)生一個空set/multiset
set c(op) 以op為排序準則產(chǎn)生一個空set/multiset
set c1(c2) 產(chǎn)生某一個set/multiset的副本
set c(beg, end) 以區(qū)間[beg, end)內(nèi)的元素產(chǎn)生一個set/multiset
set c(beg, end, op) 以op為排序準則,以區(qū)間[beg, end)內(nèi)的元素產(chǎn)生一個set/multiset
c.~set() 銷毀所有元素,釋放內(nèi)存
其中set可為下列形式:set<Elem>、set<Elem, op>、multiset<Elem>、multiset<Elem, op>
c.size() 返回當前的元素數(shù)量
c.empty() 判斷c是否為空
c.max_size() 返回可容納的元素最大數(shù)值
c1 compare c2 compare可為==,!=,<,>,<=和>=
c.count(elem) 返回“元素值為elem”的元素個數(shù)
c.find(elem) 返回“元素值為elem”的第一個元素的迭代器,如果找不到就返回end()
c.lower_bound(elem) 返回elem的第一個可安插位置,也就是“元素值>=elem”的第一個元素位置
c.upper_bound(elem) 返回elem的最后一個可安插位置,也就是“元素值>elem”的第一個元素位置
c.equal_range(elem) 返回elem的第一個和最后一個位置,也就是“元素值==elem”的第一個元素區(qū)間,返回值為將lower_bound()和upper_bound()的返回值做成一個pair返回
c1 = c2 將c2全部元素賦值給c1
c1.swap(c2) 將c1和c2元素互換
c.begin() 返回一個雙向存取迭代器(將元素視為常數(shù)),指向第一個元素
c.end() 返回一個雙向存取迭代器(將元素視為常數(shù)),指向最后元素的下一個位置
c.rbegin() 返回一個逆向迭代器,指向逆向迭代的第一個元素
c.rend() 返回一個逆向迭代器,指向逆向迭代的最后元素的下一個位置
c.insert(elem) 插入一個elem副本并返回新元素的位置
c.insert(it, elem) 安插elem副本返回新元素的位置(it是一個提示指出安插操作的搜尋起點)
c.insert(beg, end) 插入?yún)^(qū)間[beg, end)內(nèi)的所有元素副本,無返回值
c.erase(elem) 移除“與elem相等”的所有元素,返回被移除元素的個數(shù)
c.erase(it) 移除it位置上的元素,無返回
c.erase(beg, end) 移除[beg, end)區(qū)間內(nèi)的所有元素,無返回
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);
(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的排序準則必須是strict weak ordering其意義是:1必須是反對稱的,對判斷式op而言,如果op(x,y)為真則op(y,x)為假。2必須是可傳遞的,如果op(x,y)為真且op(y,z)為真則op(x,z)。3必須是非自反的,op(x,x)永遠為假。
(3)set/multiset通常都是以平衡二叉樹來實現(xiàn)的,事實上set/multiset的實現(xiàn)版本大多以紅黑樹來實現(xiàn),它保證節(jié)點安插時最多只會做兩個重新連接動作,而且到達某一元素的最長路徑最多只是最短路徑深度的兩倍。
(4)set/multiset的操作函數(shù):
set c 產(chǎn)生一個空set/multiset
set c(op) 以op為排序準則產(chǎn)生一個空set/multiset
set c1(c2) 產(chǎn)生某一個set/multiset的副本
set c(beg, end) 以區(qū)間[beg, end)內(nèi)的元素產(chǎn)生一個set/multiset
set c(beg, end, op) 以op為排序準則,以區(qū)間[beg, end)內(nèi)的元素產(chǎn)生一個set/multiset
c.~set() 銷毀所有元素,釋放內(nèi)存
其中set可為下列形式:set<Elem>、set<Elem, op>、multiset<Elem>、multiset<Elem, op>
c.size() 返回當前的元素數(shù)量
c.empty() 判斷c是否為空
c.max_size() 返回可容納的元素最大數(shù)值
c1 compare c2 compare可為==,!=,<,>,<=和>=
c.count(elem) 返回“元素值為elem”的元素個數(shù)
c.find(elem) 返回“元素值為elem”的第一個元素的迭代器,如果找不到就返回end()
c.lower_bound(elem) 返回elem的第一個可安插位置,也就是“元素值>=elem”的第一個元素位置
c.upper_bound(elem) 返回elem的最后一個可安插位置,也就是“元素值>elem”的第一個元素位置
c.equal_range(elem) 返回elem的第一個和最后一個位置,也就是“元素值==elem”的第一個元素區(qū)間,返回值為將lower_bound()和upper_bound()的返回值做成一個pair返回
c1 = c2 將c2全部元素賦值給c1
c1.swap(c2) 將c1和c2元素互換
c.begin() 返回一個雙向存取迭代器(將元素視為常數(shù)),指向第一個元素
c.end() 返回一個雙向存取迭代器(將元素視為常數(shù)),指向最后元素的下一個位置
c.rbegin() 返回一個逆向迭代器,指向逆向迭代的第一個元素
c.rend() 返回一個逆向迭代器,指向逆向迭代的最后元素的下一個位置
c.insert(elem) 插入一個elem副本并返回新元素的位置
c.insert(it, elem) 安插elem副本返回新元素的位置(it是一個提示指出安插操作的搜尋起點)
c.insert(beg, end) 插入?yún)^(qū)間[beg, end)內(nèi)的所有元素副本,無返回值
c.erase(elem) 移除“與elem相等”的所有元素,返回被移除元素的個數(shù)
c.erase(it) 移除it位置上的元素,無返回
c.erase(beg, end) 移除[beg, end)區(qū)間內(nèi)的所有元素,無返回
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);
熱門評論
最新評論