C++ 頭文件系列(map)。本站提示廣大學習愛好者:(C++ 頭文件系列(map))文章只能為提供參考,不一定能成為您想要的結果。以下是C++ 頭文件系列(map)正文
該頭文件包括兩個概念類似的容器----map、multimap。 而這兩個容器反映的概念就是 映射。
這兩個容器 相反 的屬性有:
這兩個不相反的屬性是:
既然說到關聯性容器,自然得說說規范庫的容器類別。 C++庫容器次要能分紅以下幾類:
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前往傳入鍵的上界,不包括該鍵(假如存在的話):
兩個函數這樣設計的話:
由於映射容器的特殊性,map和multimap具有其他容器所沒有的一些特殊函數:
multimap為一對多映射,即一個Key能夠映射到多個值。
由於是一對多映射的關系,該庫沒有提供像map::operator []、map::at那樣的元素存取函數, 而是想讓用戶依賴於lower_bound、upper_bound這些函數。
語義完好的函數同時,由於允許一個鍵有對應多個值,某些函數也失掉了它真正的意義: