日常小收穫三 STL

2021-09-11 18:39:28 字數 2991 閱讀 5120

c++ stl中標準關聯容器set, multiset, map, multimap內部採用的就是一種非常高效的平衡檢索二叉樹:紅黑樹,也成為rb樹(red-black tree)。rb樹的統計效能要好於一般平衡二叉樹,所以被stl選擇作為了關聯容器的內部結構。

set裡元素唯一,且預設從小到大排序。

總的內建函式:

1.  begin()--返回指向第乙個元素的迭代器

2. clear()--清除所有元素

3. count()--返回某個值元素的個數

4. empty()--如果集合為空,返回true

5. end()--返回指向最後乙個元素的迭代器

6. equal_range()--返回集合中與給定值相等的上下限的兩個迭代器

7. erase()--刪除集合中的元素

8. find()--返回乙個指向被查詢到元素的迭代器

9. get_allocator()--返回集合的分配器

10. insert()--在集合中插入元素

11. lower_bound()--返回指向大於(或等於)某值的第乙個元素的迭代器

12. key_comp()--返回乙個用於元素間值比較的函式

13. max_size()--返回集合能容納的元素的最大限值 int:214748364 ll:178956970

14. rbegin()--返回指向集合中最後乙個元素的反向迭代器

15. rend()--返回指向集合中第乙個元素的反向迭代器

16. size()--集合中元素的數目

17. swap()--交換兩個集合變數

18. upper_bound()--返回大於某個值元素的迭代器

19. value_comp()--返回乙個用於比較元素間的值的函式

常用函式:

1、set輸出最小與最大元素

int min, max;

min = *set_.begin();

max = *set_.end();

//特別的:

iter = set_.end();

cout<<*iter<2、set迭代器與反向迭代器

setset_;

up(i, 1, 8) set_.insert(i);

set::iterator iter = set_.begin();

while(iter != set_.end()) printf("%d ", *iter++);

puts("");

set::reverse_iterator riter = set_.rbegin();

while(riter != set_.rend()) printf("%d ", *riter++);

puts("");

輸出結果:

1 2 3 4 5 6 7 8

8 7 6 5 4 3 2 1

3、set刪除元素

/***

erase(iterator); //刪除定位器iterator指向的值

erase(first,second); //刪除定位器first和second之間的值

erase(key_value); //刪除鍵值key_value的值

***/

/***刪除5***/

set_.erase(set_.find(5));

set_.erase(lower_bound(set_.begin(), set_.end(), 5));

set_.erase(set_.lower_bound(5));

set_.erase(set_.find(5), set_.find(6)); //左閉右開

set_.erase(5);

set::iterator iter = set_.begin();

while(iter != set_.end()) printf("%d ", *iter++);

puts("");

4、set查詢

if(set_.find(9) == set_.end()) cout<<"查詢不到"<5、set自定義排序

特別的對於string的長度進行排序:

struct cmp_string_m_n

//注意 如果set_插入為

};setset__;

set__.insert("aa");

set__.insert("ab");

set__.insert("abc");

set::iterator iter = set__.begin();

while(iter != set__.end()) cout<< *(iter++) << ' ';

puts("");

//輸出結果 : abc aa

其他自定義排序:

//普通的

struct cmp_int_m_n

};//結構體

struct node

;struct cmp_node_m_n

};int main()

); set_.insert();

set_.insert();

set_.insert();

set_.insert();

set::iterator iter = set_.begin();

while(iter != set_.end()) printf("%d %d\n", iter->x, iter->y), iter++;

puts("");

}//執行結果:

1 22 5

2 42 3

3 6

顧名思義,可以儲存重複的元素;有一點需要特別注意:刪除的時候:

int main()

};int main()

//執行結果:

1

專案收穫小總結

提交時顯示到瀏覽器時設定字符集!request.setcharacterencoding 字符集 互相轉碼 xm urlencoder.encode xm,utf 8 xm urldecoder.decode xm,iso 8859 1 轉字元string yxdm new string reque...

日常小知識

關閉php警告報錯 error reporting 0 linux查詢檔案命令 find name print 獲取網頁內容 file get contents url 開啟mysql 慢查詢 log slow queries long query time 1 log long format 開啟...

日常學習 STL之map

對map最初的印象,源於王建德老師在山東noip夏令營上那銷魂的一句 map,i,j 音 嘜頗,挨,傑 ruka上對map並沒有講很多,ty菌說map主要用來寫雜湊 雖然她曾用它寫過鄰接矩陣 迴圈巢狀map intorz 而李晨和里奧甚至表示基本不用map。但是既然有這一項奇妙的東西,想必是有用的,...