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...