20170611 常用關聯容器的函式

2021-08-02 11:17:03 字數 4340 閱讀 8568

20170611_常用關聯容器的函式

1、關聯容器支援快速的高效的關鍵字查詢和訪問。標準庫提供了8個關聯容器:

按照關鍵字有序儲存元素:

無序集合:

2、map:關鍵字-值對的集合,也就是關聯陣列。該陣列的下標是關鍵字,可以不必是正整數,可以通過關鍵字來o(1)的查詢某個元素。

當從 map 中讀取乙個元素時,會得到乙個pair 型別的物件,簡單來說,pair 是乙個模板型別,儲存兩個名為first 和second 的資料成員(都是公有的)。map 所儲存的pair 用first 來儲存關鍵字,second 來儲存對應的值。

舉例子:

//統計每個單詞在輸入中出現的次數。

mapword_count;

string word;

while(cin>>word)

++word_count[word];

for(const auto &mem:word_count)

cout<1)?" times ":" time")<

3、set:關鍵字的簡單集合。當只是想知道乙個值是否存在時,set 是最好的選擇。

舉例子:

//忽略常見的單詞,如「the」、「and」、「or」等。我們可以在set 儲存想要忽略的單詞,

//只對不在集合中出現的單詞進行統計數目。

mapword_count;

setexclude=;

string word;

while(cin>>word)

4、pair 型別:    #include

簡單來說,pair 是乙個模板型別,儲存兩個名為first 和second 的資料成員(都是公有的)。map 所儲存的pair 用first 來儲存關鍵字,second 來儲存對應的值。

pair 上的操作:

5、關聯容器的操作:

6、解引用操作:

map:

//獲得指向word_count 中乙個元素的迭代器:

mapword_count;

auto map_it = word_count.begin(); //獲得指向word_count 中第乙個元素(元素是pair 型別)的迭代器。

coutcouotmap_it->first="new key"; //錯誤,關鍵字是const 型別的。

map_it->second++; //正確,可以通過迭代器來改變元素

記住:乙個map 的value_type 是乙個pair 型別,我們可以改變pair 的值,但是不能改變pair 的關鍵字。

set:

setiset=;

set::iterator set_it=iset.begin();

if(set_it != iset.end())

{*set_it=42; //錯誤,set 中的關鍵字是唯讀的。

cout<<*set_it<

7、遍歷關聯容器:

map 和set 都是支援迭代器的, begin()和 end()操作、cbegin()和 cend()。用它們可以遍歷關聯容器。

//獲得指向word_count 中乙個元素的迭代器:

mapword_count;

auto map_it = word_count.cbegin(); //獲得指向word_count 中第乙個元素(元素是pair 型別)的迭代器。

while(map_it != word_count.cend())

{ cout<

8、新增元素:關聯容器的insert 操作:

9、刪除元素:

10、map 和 unordered_map 的下標操作:

11、訪問元素:在乙個關聯容器中尋找元素的操作。

12、無序容器管理操作:

桶介面:

桶迭代:

雜湊策略:

另外:

map是一種關聯式容器,包含「 關鍵字 / 值 」 對。

1、 begin()                      返回指向 map 頭部的迭代器

2、 clear()                     刪除所有元素

3、 count()                      返回指定元素出現的次數

4、 empty()                     如果 map 為空則返回 true

5、 end()                         返回指向 map 末尾的迭代器

6、 equal_range()            返回特殊條目的迭代器對

7、 erase()                      刪除乙個元素

8、 find()                         查詢乙個元素

9、 get_allocator()          返回 map 的配置器

10、insert()                     插入元素

11、key_comp()              返回比較元素 key 的函式

12、lower_bound()         返回  鍵值 >= 給定元素  的第乙個位置

13、max_size()               返回可以容納的最大元素個數

14、rbegin()                    返回乙個指向 map 尾部的 逆向迭代器

15、rend()                       返回乙個指向 map 頭部的 逆向迭代器

16、size()                        返回 map 中元素的個數

17、swap()                      交換兩個 map

18、upper_bound()         返回   鍵值 > 給定元素  的第乙個位置

19、value_comp()           返回比較元素 value 的函式

set 是集合,set 中不會包含重複的元素,這是和 vector 的區別。

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()                     返回集合能容納的元素的最大限值

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

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

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

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

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

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

容器 順序容器 關聯容器

容器分為 順序容器 關聯容器,示意圖如下 順序容器 只儲存值,關聯容器 key value形式,關聯容器的乙個元素包含兩個部分 鍵值對 key value 有序容器 底層實現為紅黑樹,即容器內的key是有序的 無序容器 底層實現為hash table,雜湊表 區別 順序容器通過元素在容器中的位置順序...

STL 關聯容器

1 關聯容器與順序容器的本質區別 關聯容器通過鍵 key 儲存和讀取元素,而順序容器則通過元素在容器中的位置順序儲存和訪問元素。2 關聯容器的型別 map set multimap multiset 3 pair型別 pair型別的比較 p1 p1 p2 如果兩個pair物件的first和secon...

c 關聯容器

1.map建構函式 mapm 普通初始化 mapm m2 複製初始化法 mapm b,e 另乙個map物件的迭代器初始化法 注意 1 鍵值型別必須定義 操作符號,資料訪問時需要呼叫。2 m aaa 下表訪問方式導致的結果是,若鍵對應的值不存在,則插入該鍵值對應的預設值。2.map插入操作 m.ins...