C 關聯容器

2021-07-24 22:36:33 字數 1670 閱讀 5375

1、關聯容器定義

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

則通過元素在容器中的位置順序儲存和訪問元素。

關聯容器(associative containers)支援通過鍵來高效地查詢和讀取元素。兩個基本的關聯容器型別是 map set。map 的元素以鍵-值(key-value)對的

形式組織:鍵用作元素在 map 中的索引,而值則表示所儲存和讀取的資料。set

僅包含乙個鍵,並有效地支援關於某個鍵是否存在的查詢。

set 和 map 型別的物件所包含的元素都具有不同的鍵,不允許為同乙個鍵新增第二個元素。如果乙個鍵必須對應多個例項,則需使用 multimap 或 multi

set,這兩種型別允許多個元素擁有相同的鍵。

關聯容器不提供front、 push_front、 pop_front、back、push_back 以及 pop_back 操作,不提供 assign 函式,支援clear 和 erase 操作,但關聯容器的 erase 運算返回void 型別。支援

關於容器大小的操作。但 resize 函式不能用於關聯容器。

「容器元素根據鍵的次序排列」在迭代遍歷關聯容器時,我們可確保按鍵的順序的訪問元素,而與元素在容器中的存放位置完全無關。

​2、關聯容器map建構函式

鍵型別的約束:鍵型別必須定義 < 操作符,而且該操作符應能「正確地工作」。

3、map的插入操作

(1)使用下標

使用下標訪問 map 物件​,會先在map中查詢對應鍵值的元素如果不存在則在map中新增此元素,用下標訪問不存在的元素將導致在 map 容器中新增乙個新元素,它的鍵即為該下標值。

​​insert 的返回值:含有乙個或一對迭代器形參的 insert函式版本並不說明是否有或有多少個元素插入到容器中。

但是,帶有乙個鍵-值 pair 形參的 insert 版本將返回乙個值:包含乙個

迭代器和乙個 bool 值的 pair 物件,其中迭代器指向 map 中具有相應鍵的元

素,而 bool 值則表示是否插入了該元素。如果該鍵已在容器中,則其關聯的值

保持不變,返回的 bool 值為 true。表示已經插入map

4、map的查詢

(1)使用下標

使用鍵值key作為下標可以訪問map但是使用下標存在乙個很危險的***:如果該鍵不在 map 容器中,那麼下標操作會插入乙個具有該鍵的新元素。

map 容器提供了兩個操作:count 和 find,用於檢查某個鍵是否存在而不會插入該鍵。

count返回 m 中 k 的出現次數​​。

find如果 m 容器中存在按 k 索引的元素,則返回指向該元素的迭代​器。如果不存在,則返回超出末端的end迭代器

​5、map的刪除

​6、map遍歷

與其他容器一樣,map 同樣提供 begin 和 end 運算,以生成用於遍歷整個

容器的迭代器。

c 關聯容器

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

C 關聯容器

1.關聯容器是通過關鍵字來儲存和訪問資料的。關聯容器分為兩大類 map和set。其中,map是通過鍵值對來操作的,這裡的鍵就是關鍵字,值就是對應的資料。例如 mapm 定義了乙個空的map變數m,它的關鍵字型別是int,關鍵字對應的值的型別是int。可以將map理解成為函式,關鍵字是自變數,關鍵字對...

C 關聯容器

關聯容器 有序和無序的 不支援順序容器的位置相關的操作,例如push front或push back。原因是關聯容器中元素是根據關鍵字儲存的,這些操作對關聯容器沒有意義。而且,關聯容器也不支援建構函式或插入操作這些接受乙個元素值和乙個數量值的操作。關聯容器的迭代器都是雙向的 map的第乙個元素是關鍵...