STL set 使用方法小結

2022-08-22 13:12:11 字數 1521 閱讀 5568

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 所有資料庫...