C 知識 關聯容器

2021-09-25 20:39:47 字數 2041 閱讀 3805

這一章介紹了關聯容器,對於關聯容器可以認為是下標為關鍵字的陣列,關聯容器不支援隨機訪問。只能使用關鍵字作為索引來進行訪問值。關於更多的知識,大家可以自行檢視書籍,這裡主要介紹一些細節問題。

最後,如果有理解不對的地方,希望大家不吝賜教,謝謝!

【c++系列】【前一章:泛型演算法】【下一章:動態記憶體】

關聯容器中的元素是按關鍵字來儲存和訪問的。兩個主要的關聯容器型別是map和set。map中的元素是一些關鍵字——值(key-value)對:關鍵字起到索引的作用,值則表示與索引相關聯的資料。set中每個元素只包含乙個關鍵字:set支援高效的關鍵字查詢操作——檢查乙個給定關鍵字是否在set中。

map型別通常被稱為關聯陣列,關聯陣列與「正常」陣列類似,不同之處在於其下標不必是整數。與之相對,set就是關鍵字的簡單集合,當只想知道乙個值是否存在時,set是最有用的。

對於mapm;前乙個代表下標型別,後乙個代表值型別,對於使用第乙個資料,可以採用m.first,對於使用第二個資料,可以採用m.second。

set也是乙個模板,必須指定型別,與順序容器不同的是:可以說set是集合,每乙個關鍵字不一樣,而順序容器裡的是內容,允許有一樣的。

定義在標頭檔案utility中。乙個pair儲存兩個資料成員,類似容器,pair是乙個用來生成特定型別的模板。當建立乙個pair時,我們必須提供兩個型別名。例如:pairpir;我們也可以用pir.first來使用第乙個元素,用pir.second來使用第二個元素。

當解引用乙個關聯容器迭代器時,我們會得到乙個型別為容器的value_type的值的引用。對於map而言,value_type是乙個pair型別,其first成員儲存const關鍵字,second成員儲存值。

必須記住:乙個map的value_type是乙個pair,我們可以改變pair的值,但不能改變關鍵字成員的值,即可以改變second的值,不能改變first的值,因為關鍵字是const的。

set的迭代器是const的

map和set型別都支援begin和end操作,可以用這些函式獲取迭代器,然後用迭代器遍歷容器。 

向乙個map新增元素

對乙個map進行insert操作時,必須記住元素型別是pair。

//向word_count插入word的4種方法

word_count.insert();

word_count.insert(make_pair(word,1));

word_count.insert(pair(word,1));

word_count.insert(map::value_type(word,1));

對於不包含重複關鍵字的容器,新增單一元素的insert和emplace版本返回乙個pair,告訴我們操作是否成功。pair的first成員是乙個迭代器,指向具有給定關鍵字的元素;second成員是乙個bool值,指出元素是插入成功還是已經存在於容器中。

通過傳遞給erase乙個迭代器或乙個迭代器對來刪除乙個元素或者乙個元素範圍。指定的元素被刪除,函式返回void。還可以接受乙個key_type引數,此版本刪除給定關鍵字的元素,返回實際刪除的元素的數量。

map的下標操作

map下標運算接受乙個索引,獲取與此關鍵字相關聯的值。但是,與其他下標運算子不同的是,如果關鍵字並不在map中,會為它建立乙個元素並插入到map中,關聯值將進行值初始化。

對於不允許重複關鍵字的容器,可能使用find還是count沒什麼區別,但對於允許重複關鍵字的容器,count還會做更多的工作:如果元素在容器中,它還會統計有多少個元素有相同的關鍵字,如果不計數,最好使用find。返回乙個迭代器,如果沒找到,則返回尾迭代器。

定義了4個無序關聯容器,這些容器不是使用比較運算子來組織元素,而是使用乙個雜湊函式和關鍵字型別的==運算子。在關鍵字型別的元素沒有明顯的序關係的情況下,無序容器是非常有用的。hash特殊的標準庫模板,無序容器用它來管理元素的位置。

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 關聯容器

1 關聯容器定義 關聯容器和順序容器的本質差別在於 關聯容器通過鍵 key 儲存和讀取元素,而順序容器 則通過元素在容器中的位置順序儲存和訪問元素。關聯容器 associative containers 支援通過鍵來高效地查詢和讀取元素。兩個基本的關聯容器型別是 map set。map 的元素以鍵 ...