第10章 關聯容器 1

2021-06-02 06:03:33 字數 1330 閱讀 1264

關聯容器和順序容器的本質差別在於:關聯容器通過鍵(key)儲存和讀取元素,而順序容器則通過元素在容器中的位置順序儲存和訪問元素。

關聯容器(associative container)支援通過鍵來高效地查詢和讀取元素。map的元素以鍵-值(key-value)對的形式組織:鍵用作元素在map中的索引,而值則表示所儲存和讀取的資料。set僅包含乙個鍵,並有效地支援關於某個鍵是否存在的查詢。

10.1 引言:pair型別

pair型別在utility標頭檔案中定義。

1. pair的建立和初始化

在建立pair物件時,必須提供兩個型別名:pair物件所包含的兩個資料成員各自對應的型別名字,這兩個型別不必相同。

pairanon;
2. pair物件的操作

對於pair類,可以直接訪問其資料成員:其成員都是公有的,分別命名為first和second。只需使用普通的點操作符——成員訪問標誌即可訪問其成員。

pairanon;

anon.first = "ander fan";

anon.second = 100;

3. 生成新的pair物件

pairanders = make_pair("anders fan", 100);
10.2 關聯容器

「容器元素根據鍵的次序排列」這一事實就是乙個重要的結論:在迭代遍歷關聯容器時,我們可確保按鍵的順序訪問元素,而與元素在容器中的存放位置完全無關。

10.3 map型別

10.3.1 map物件的定義

在定義map物件時,必須分別指明鍵和值的型別。

在實際應用中,鍵型別必須定義《操作符,而且該操作符應能「正確地工作」,這一點很重要。

對於鍵型別,唯一的約束就是必須支援《操作符,至於是否支援其他的關係或相等運算,則不作要求。

10.3.2 map定義的型別

map的value_type是儲存元素的鍵以及值的pair型別,而且鍵為const。

value_type是pair型別,它的值成員可以修改,但鍵成員不能修改。

1. map迭代器進行解引用將產生pair型別的物件

mapbooks;

books["c"] = 2;

books["csharp"] = 10;

map::iterator map_it = books.begin();

cout << map_it -> first << endl;

cout << map_it -> second << endl;

2. map容器額外定義的型別別名(typedef)

第10章 關聯容器

關聯容器支援通過鍵來高效地查詢和讀取元素。基本關聯容器 map和set。set僅包含乙個鍵。multimap和multiset支援同乙個鍵多次出現在容器中。pair型別,定義在utility標頭檔案中。建立和初始化如 pairp1 v1,v2 或make pair v1,v2 賦給pair型別的變數...

複習小記 第10章 關聯容器

1.使用下標訪問map中不存在的元素,將會使map容器中被加入乙個新的pair,他的鍵即為該下標。3.使用下標操作符可以讀取map容器中的值,但是該操作存在乙個很危險的 若作為下標的鍵值不在該map容器中,那麼此操作會插入乙個具有該鍵的新元素。map容器提供了兩個操作用於檢查某個鍵是否存在而不會插入...

第11章 關聯容器

關聯容器型別 map關聯陣列 儲存關鍵字 值對 set關鍵字即值,即只儲存關鍵字的容器 multimap 關鍵字可以重複出現的map multiset 關鍵字可以重複出現的set unordered map 用雜湊函式組織的map unordered set 用雜湊函式組織的set unordere...