set是stl中一種標準關聯容器(vector,list,string,deque都是序列容器,而 set,multiset,map,multimap是標準關聯容器),它底層使用平衡的搜尋樹——紅黑樹實現,插入刪除操作時僅僅需要指標操作節點即可 完成,不涉及到記憶體移動和拷貝,所以效率比較高。
set,顧名思義是「集合」的意思,在set中元素都是唯一的,而且預設情況下會對元素自動進行公升序排列。如果需要集合中的元素允許重複那麼可以使用multiset
插入和刪除要比向量(vector)快,但插入比容器內元素都大的新元素或查詢元素時會有些慢。
使用時要加標頭檔案
#include
struct compare
{bool operator()(const int &a,const int &b)const
{return a
//定義了<之後,==和>以及>=,<=就都確定了,stl的比較關係都是用<來確定的,所以必須通 過定義< 「嚴格小於」來確定比較關係
定義:setst; //集合容器
setst3;//自定義內部比較函式為conpare(只定義"<",其他的均由)
setst2(st) //建立乙個與st相同的容器
vectervec;
st(vec.begin(),vec.end());//用vector初始化set
set:iterator
p; 定義set迭代器
set::
reverse_iterator p3; 定義反向集合定位器(ms沒什麼用)
int x;
成員函式:
begin //返回集合首元素位置迭代器
end //返回集合尾元素位置迭代器
insert(x) //將元素x加入集合
find(x) // 返回x所在位置的迭代器,找不到返回st.end()
clear() //清空集合
empty() //判斷集合是否為空
erase(x) //刪除x這個元素
erase(p) //刪除p位置的元素
count(x) //判斷是否存在元素x 存在返回1 , 否則返回0
lower_bound(x) //返回第乙個大於等於x的迭代器,找不到返回st.end();
upper_bound(x) //返回第乙個大於x的迭代器,找不到返回st.end();
s.equal_range(x) //返回lower_bound(x)和upper_bound(x)(感覺用來查詢比find靠譜)
size()
//返回容器中元素個數
st.swap(st2)
//交換st與st2的元素
(也可以寫成st2.swap(st))
集合的判等 ==
兩個集合相等,當且僅當他們的元素個數相等,且同乙個位置上的值相等.
集合比較大小
兩個集合比較是基於第乙個不同的元素的大小比較
練手例題:hnoi2004 寵物收養所
如果說這倆玩意有什麼用呢,還真沒什麼用...賽場上沒時間寫平衡樹就用它騙騙分吧。
IO REMOVE LOCK使用方法小結
io remove lock 刪除鎖 的具體結構沒有公開,wdk的文件中中查不到io remove lock。最開始看到io remove lock是在wdk的例子event中。下面是參考網上的一些資料之後的一點總結,錯誤的地方請指正。wdm 驅動程式在處理裝置刪除 irp 並釋放驅動程式分配的記憶...
Git使用方法小結
安裝完成後,還需要最後一步設定,在命令列輸入 git config global user.name your name git config global user.email email example.com 因為git是分布式版本控制系統,所以,每個機器都必須自報家門 你的名字和email位...
Sqlmap 使用方法小結
平常的使用get方法像 tables columns t d dbs dump 啥的就不說了,只是部落格幾天不發,空著不好,還是得寫寫東西 is dba 當前使用者許可權 是否為root許可權,mssql下最高許可權為sa dbs 所有資料庫 current db 當前資料庫 users 所有資料庫...