程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++ 頭文件系列(map)

C++ 頭文件系列(map)

編輯:關於C++

C++ 頭文件系列(map)。本站提示廣大學習愛好者:(C++ 頭文件系列(map))文章只能為提供參考,不一定能成為您想要的結果。以下是C++ 頭文件系列(map)正文


簡介

該頭文件包括兩個概念類似的容器----map、multimap。 而這兩個容器反映的概念就是 映射。

這兩個容器 相反 的屬性有:

  • 關聯性
  • 映射
  • 靜態增長
  • 鍵(Key)獨一性

這兩個不相反的屬性是:

  • 映射關系

容器類別

既然說到關聯性容器,自然得說說規范庫的容器類別。 C++庫容器次要能分紅以下幾類:

  1. 序列性容器: 將存儲對象組織成線性模型,運用戶可以像線性數組那樣存取。
  2. 關聯性容器: 將存儲內容以鍵(Key)相關聯 ,經過鍵來存取內容。
  3. 亂序容器: 存儲對象以亂序存儲,不具有順序。
  4. 容器適配器: 經過適配的方式完成,外部運用的是其它已有的容器。
map

map為單映射容器,所謂單映射,就是一對一映射的意思。 每種信息都以 鍵 -> 值 的方式被存儲,由鍵 映射到 值,這是該類容器與vector等容器最大的不同。

完成

典型的map是以Binary Search Tree完成的,但也有能夠運用其他適宜的數據構造。 例如sgi stl運用的就是紅黑樹。

operator [ ]

除了迭代器,存取map元素時運用的較多的就是這個運算符了。 但實踐上這個函數的語義不像看上去那麼復雜,這次要是由於這個函數對特殊狀況的處置十分稀有(相比而言,C++11新增的at成員函數就比擬契合正常邏輯)。 函數傳入一個鍵k:

假如鍵k在map中,函數前往k映射的內容值;

假如鍵k不在map中,那麼函數會拔出一個新的鍵值對,對拔出的值停止默許結構,並且前往這個值得援用。

Observers

這裡有兩個特別的函數,它們在C++規范文檔裡被成為Observers(能夠是由於經過這兩個函數可以一定水平上的察看鍵值對,一定水平是由於它們只能對鍵值對停止比擬)。

key_compare     key_comp() const;
value_compare   value_comp() const;

它們前往一個comparison object,可以辨別對鍵、值停止比擬。

lower_bound、upper_bound

這兩個函數比擬流暢難懂,這裡提出來闡明一下。

lower_bound前往傳入鍵的下界,包括該鍵(假如存在的話):

upper_bound前往傳入鍵的上界,不包括該鍵(假如存在的話):

兩個函數這樣設計的話:

  1. 傳入同一個鍵,能正確地將一個range分紅上下兩局部。
  2. 用迭代器表示的range,開端和開頭辨別以閉區間和開區間表示,這兩個函數的前往至可以十分直觀的代表range。
特殊函數

由於映射容器的特殊性,map和multimap具有其他容器所沒有的一些特殊函數:

  • find
  • count:由於map是單映射,所以它的前往至只能夠是1或0。
  • equal_range:前往給定鍵的元素范圍,由於map是單映射,前往的范圍為空或包括一個元素。 前往值為迭代器pair,辨別等於調用lower_bound和upper_bound的後果。
multimap

multimap為一對多映射,即一個Key能夠映射到多個值。

由於是一對多映射的關系,該庫沒有提供像map::operator []、map::at那樣的元素存取函數, 而是想讓用戶依賴於lower_bound、upper_bound這些函數。

語義完好的函數

同時,由於允許一個鍵有對應多個值,某些函數也失掉了它真正的意義:

  • count(不止是前往0、1)
  • equal_range(不止是前往空范圍或包括一個元素的范圍)
語義有異的函數
  • find(假如有多個值,前往恣意一個)



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved