1. 程式人生 > >Chapter11(關聯容器)--C++Prime筆記

Chapter11(關聯容器)--C++Prime筆記

rem lin get 叠代 val 新元素 1.8 文件 fir

1.關聯容器:map關鍵字-值對,經常被稱為關聯數組set中每個元素只有一個關鍵字,即只保存關鍵字的容器①允許重復的關鍵字的容器名字都包含multi。②不保持關鍵字順序存儲的容器的名字都以但粗unordered開頭。③無序容器以哈希函數來組織元素。④關聯容器的叠代器都是雙向的。map set multimap multiset / 無序集合 unordered_map unordered_set unordered_multimap unordered_multiset.
2.使用map:map <string,size_t>word_count;
①指定關鍵字和值的類型②map所使用的pair用first成員保存關鍵字,用second成員保存對應的值使用set:set<string> exclude = {"the","but"};exclude.find(word)返回一個叠代器,如果關鍵字在set中,叠代器指向該關鍵字,否則返回尾後叠代器。
3.map中的元素的pair類型的,這種類型定義在頭文件utility中。pairde的數據成員是public的。
4.關聯容器額外的類型別名:key_type:此容器類型的關鍵字類型mapped_type:每個關鍵字關聯的類型;只適用於mapvalue_type:對於set與key_type相同
對於map,為pair<const key_type,mapped_type>map和set關鍵字是const的
5.當使用一個叠代器歷遍一個map,multimap,set,multiset時,叠代器按關鍵字升序歷遍元素。
6.向map和和向multimap,multiset添加元素的區別:①前者只能添加不存在的元素。②前者返回pair<std:map::value_type,bool>,後者返回指向新元素的叠代器。
7.set和multimap,unordered multimap不支持小標運算符。對於map來說,如果使用一個不在容器中的關鍵字作為下標,會添加一個具有此關鍵字的元素到map中。但是如果使用at函數,若關鍵字不存在,拋出一個out_of_range異常。
①對map進行下標操作時,會獲得一個mapped_type對象,但當解引用一個map叠代器時,會得到一個value_type對象。②下標和at操作只適用於非const的map和unordered_map
8.c.lower_bound(k)返回一個叠代器,指向第一個關鍵字不小於k的元素(指向第一個具有給定關鍵字的元素)c.upper_bound(k)返回一個叠代器,指向第一個關鍵字大於k的元素(指向最後一個匹配給定關鍵字的元素之後的位置)--如果lower_bound(k)和upper_bound(k)返回相同叠代器,則說明不存在這個關鍵字。c.equal_range(k)返回一個叠代器pair,表示關鍵字等於k的元素的範圍,若k不存在,pair的兩個成員均等於c.end();

9.getline不會跳過前導空格。

Chapter11(關聯容器)--C++Prime筆記