第十一章 關聯容器

  1. 關鍵字起到索引的作用,值則表示與索引相關聯的數據。
  2. 關聯容器不支持順序容器的位置相關的操作,例如 push_front 或 push_back 。原因是關聯容器中元素是根據關鍵字存儲的。
  3. 標準情況下,標準庫使用關鍵字類型的<運算符來比較兩個關鍵字。
  4. 一個 map 的 value_type 是一個 pair(const key_type, mapped_type),我們可以改變 pair 的值,但是不能改變關鍵字成員的值。
  5. 當解引用一個關聯容器迭代器時,我們會得到一個類型爲容器的 value_type 的值的引用。
  6. set 類型不支持下標,因爲 set 中沒有關鍵字相關聯的“值”。我們不能對一個 multimap 或一個 unordered_multimap 進行下標操作,因爲這些容器中可能有多個值與一個關鍵字相關聯。
  7. 與其他下標運算符不同的是,如果關鍵字並不在 map 中,會爲它創建一個元素並插入到 map 中,關聯值將進行初始化。由於下標運算符可能插入一個新元素,我們只可以對非 const 的 map 進行下標操作。
  8. c.at[k] 如果 k 不在 c 中,拋出一個 out_of_range 異常。(c 爲 map 或者 unordered_map)
  9. 無需容器在存儲上組織爲一組桶,每個桶保存零個或多個元素。無序容器使用一個哈希函數將元素映射到桶。如果允許重複關鍵字,所有具有相同關鍵字的元素也都會在同一個桶中。因此,無序容器的性能依賴於哈希函數的質量和桶的數量和大小。
  10. 標準庫爲內置類型(包括指針)提供了 hash 模板。還爲一些標準庫類型,包括 string 和智能指針類型定義了 hash。因此,我們可以直接定義關鍵字是內置類型、string 還是智能指針類型的無序容器。但是,我們不能直接定義關鍵字類型爲自定義類類型的無序容器。與容器不同,不能直接使用哈希模板,而必須提供我們自己的 hash 模板版本。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章