演算法競賽中常用的STL

2021-10-05 10:18:40 字數 3237 閱讀 4791

[toc]

可以理解為bit這個資料型別的陣列(即取值只為0/1),大多數情況下,每個元素所佔記憶體確實只有1bit,是bool型別的1/8。方便各種位操作的進行。

構造方法

都需要在定義時指明長度

123

4567

8

預設:

std::bitset<16> foo; //填充0

整數:std::bitset<16> foo(0x1111); //0001000100010001

std::string

std::bitset<4> foo(std::string("1010")); //1010

位操作

123

4567

891011

1213

1415

1617

1819

:

類似陣列直接訪問

.count():

返回乙個bitset中1的個數

.size():

返回乙個bitset的長度

.any():

返回乙個bool值,表示這個bitset中是否至少有乙個1,與.none()相反

.all():

返回乙個bool值,表示這個bitset中是否全為1

.set():

將bitset全置1

.set(size_t pos, bool val = true)

將pos位上元素置val值

整體操作

1

23

to_string()	//convert to std::string

to_ulong() //convert to unsigned long

to_ullong() //convert to unsigned long long

優先佇列(預設)的本質是乙個大根堆,它的top元素始終是最大的。

優先佇列的底層container預設是vector。

構造方法

1

23

std::priority_queue, std::greater> pq(first,last);

//指定比較函式greater,變為小根堆

//first和last是儲存初始化資料的陣列指標

成員函式

123

45

.empty(): return true if it's empty

.size(): return size

.top(): 獲取頂部元素

.push(): 插入元素

.pop(): remove top element

儲存了乙個有序對,兩個元素分別為first和second,可以有不同型別

過載函式

123

4567

8910

標頭檔案關係比較:

先比較first,再比較second

swap(p1,p2):

交換兩個同型別的pair object

get(pair p)

i為0時返回first元素,為1時返回second

構造

123

4567

8

普通構造方式略。

很多其他stl資料結構中有用到make_pair函式

template pairmake_pair (t1 x, t2 y)

引數(first, last, x),原陣列已從小到達排序

在[first, last)中找到第乙個》=x的元素的位置

upper_bound是找到第乙個》x的元素位置

這兩個函式中,如果找不到滿足要求的,返回last

可遍歷vector和map

123

4567

891011

int main()

輸出1、2、3

可見是按照key值遍歷組成map的這些pair

1

2

string::substr()

string substr (size_t pos = 0, size_t len = npos) const;返回子串

123

456

過載(key_type k)

如果mp中存在匹配到k的pair,則返回這個pair.second的引用

否則插入乙個新的pair,second值為0

對於計數型別的輸入,我們可以每次mp[x]+=1;它會從0開始向上加

可用vector:reserve(n)進行預先記憶體分配

vector成員函式

1

23

.back()取最後乙個元素值

.front()取第乙個

.pop_back()彈出最後乙個

內部是一棵紅黑樹,有序儲存元素。(預設公升序)

123

4567

set.erase(iterator或value):返回刪除元素的下乙個iterator	或

set.erase(iterator first,iterator last):抹去[first,last)區間,返回抹去元素數量

set.lower_bound&upper_bound(value)

不能存同值元素。

insert插入元素,find尋找值等於某一元素的iterator找不到返回end,count存在返回1否則返回0

STL中常用的查詢演算法

adjacent find 在iterator對標識元素範圍內,查詢一對相鄰重複元素,找到則返回指向這對元素的第乙個元素的迭代器。否則返回past the end。vectorvecint vecint.push back 1 vecint.push back 2 vecint.push back ...

STL中常用的排序演算法

merge 例如 vecinta,vecintb,vecintc是用vector宣告的容器,vecinta已包含1,3,5,7,9元素,vecintb已包含2,4,6,8元素 vecintc.resize 9 擴大容量 merge vecinta.begin vecinta.end vecintb....

C 提高 STL中常用的查詢演算法

在iterator對標識元素範圍內,查詢一對相鄰重複元素,找到則返回指向這對元素的第乙個元素的迭代器。否則返回past the end。vector int vecint vecint.push back 1 vecint.push back 2 vecint.push back 2 vecint....