C STL常用內容使用總結

2021-09-29 22:47:25 字數 3332 閱讀 6445

二叉搜尋樹(排序樹);有序;唯一;無法修改;高效查詢、插入、刪除

set是按照特定順序存儲唯一元素的容器。

在set中,元素的值也標識它(值本身是鍵,型別t),並且每個值必須是唯一的。集合中元素的值不能在容器中修改一次(元素總是常量),但可以從容器中插入或刪除它們。

在內部,集合中的元素總是按照其內部比較物件(型別為compare)指示的特定嚴格弱排序標準進行排序

set容器通常比unordered_set容器通過鍵訪問單個元素的速度更慢,但是它們允許根據子集的順序直接迭代。

set通常被實現為二分搜尋樹

#include

set s 建立一般遞增順序的set

sets 建立遞減順序的set

s.begin()  返回set容器的第乙個元素

s.end()      返回set容器的最後乙個元素

s.empty()     判斷set容器是否為空

s.size()     返回當前set容器中的元素個數

s.insert() 插入乙個元素

s.erase() 刪除乙個元素(引數可以為迭代指標、元素數值)

s.clear() 刪除set容器中的所有的元素

s.find() 查詢乙個元素,返回迭代指標;如果容器中不存在該元素,返回值等於s.end()

s.lower_bound() 返回第乙個大於或等於給定關鍵值的元素,返回迭代指標

s.upper_bound() 返回第乙個大於給定關鍵值的元素,返回迭代指標

s.equal_range() 返回一對定位器,分別表示 第乙個大於或等於給定關鍵值的元素 和 第乙個大於給定關鍵值

的元素,這個返回值是乙個pair型別,如果這一對定位器中哪個返回失敗,就會等於

s.end()

為保證元素的唯一性,也是基於二叉搜尋樹的特性,set無法就地修改元素。要想達到修改效果,只能先刪除舊再插入新值。

如果想要同時保留多個相同值的元素,則可使用multiset

二叉搜尋樹;有序;唯一;鍵不可改,值可修改;高效查詢、插入、刪除

map是按照特定順序儲存由鍵值和對映值的組合形成的元素的關聯容器。

在對映中,鍵值通常用於排序和唯一標識元素,而對映值儲存與此鍵相關聯的內容。鍵和對映值的型別可能不同,並在成員型別value_type中組合在一起,value_type是一種組合了兩者的配對型別:

typedef value_type;

在內部,對映中的元素始終按照其鍵排序,遵循其內部比較物件(型別為compare)指示的特定嚴格弱排序標準。

map容器通常比unorder_map容器通過鍵訪問單個元素的速度更慢,但它們允許根據子集的順序直接迭代。

對映中的對映值可以使用括號運算子(operator)通過其對應的鍵直接訪問。

map通常被實現為二分搜尋樹。

#include

mp[key k] 引用訪問鍵為ky的元素,不存在則用用預設構造方法建立對應key的元素

mp.at(key k) 引用訪問鍵為k的元素,不存在則丟擲異常

mp.insert(value_type v) 插入鍵值對引數型別為value_type,即pair

mp.find(key k) 查詢鍵為k對應的元素,返回迭代指標;不存在則返回mp.end()

mp.count(key k) 統計鍵k的出現次數,但只能用於判斷元素是否存在,返回0或1

mp.lower_bound(key k)

mp.upper_bound(key k)

mp.equal_range(key k)

mp.erase(key k)

mp.erase(iter it)

mp.erase(iter begin,iter end)

按照不同的方式來刪除指定元素

在使用下標訪問map時,如果k與容器中任何元素的鍵都不匹配,則函式將插入具有該鍵的新元素,並返回對其對映值的引用。請注意,這總是將容器大小增加1,即使沒有為元素分配對映值(元素是使用其預設建構函式構造的;對於基本資料型別,預設值為0)

類似的成員函式map:at在具有鍵的元素存在時具有相同的行為,但在不存在時丟擲異常

下標訪問等效於:

(*(this->insert(make_pair(k,map_type().first).second

優先佇列;堆;有序;動態獲得最「大(優先順序)」元素

priority_queue預設使用vector作為基礎容器,利用make_heap, push_heap和pop_heap三個函式實現了堆(預設是大頂堆),使得我們可以動態地獲得最大元素

#include

priority_queue q 預設(大頂堆)

priority_queueq; 大頂堆

priority_queueq; 小頂堆

priority_queueq; 自定義優先順序的堆

q.empty() 如果隊列為空返回真

q.top() 返回優先佇列對頂元素

q.pop() 刪除堆頂元素

q.push(t value) 加入乙個元素value

q.size() 返回優先佇列中擁有的元素個數

很多時候為了實現小頂堆(取出最小元素),我們也可以「錯誤」地過載運算子

friend

bool

operator

<

(const t & a,

const t & b)

由於放入priority_queue後,元素的順序發生了變化。很多時候,我們希望能得到元素的原始索引,這樣我們只能通過定義結構體記錄元素值和索引值、並過載運算子來實現這一目的。方便起見,我們可以使用pair來充當這種結構體。注意,pair的大小比較優先順序為first、second.

fill(iter begin,iter end,t value)

sort(iter begin,iter end[, cmp])

random_shuffle(iter begin,iter end)

binary_search(iter begin,iter end,t value[, cmp])

lower_bound(iter begin,iter end,t value[, cmp])

upper_bound(iter begin,iter end,t value[, cmp])

equal_range(iter begin,iter end,t value[, cmp])

swap(ob1,ob2)

max(t a,t b)

min(t a,t b)

C STL使用總結

vector動態陣列 back 返回陣列最後乙個元素。宣告 vector res m,vector n,0 上面的一行宣告了乙個二維陣列m行n列的二維陣列,並且初始化為0 有乙個交換的函式reserve res.begin res.end 將res行交換 第一行變最後 第二行變倒數第二 stack堆...

C STL常用演算法總結

演算法 問題的求解步驟,以有限的步驟,解決數學或邏輯中的問題。accumulate 元素統計 template t accumulate inputiterator first,inputiterator last,t init template t accumulate inputiterator...

C STL常用模組總結 map

使用之前引用 include定義方法過載函式彙總empty 1 explicit map const key compare comp key compare const allocator type alloc allocator type explicit map const allocator...