STL學習 16 map對映

2021-09-24 16:54:25 字數 3572 閱讀 7113

常用的對映類是map, multimap。在前述的各個容器中,僅儲存著一樣東西,但是在對映中將會得到兩樣東西:關鍵字以及作為對關鍵字進行查詢得到的結果值,即一對值。map單對映中key與value是一對一的關係,multimap多對映中key與value可以是一對多的關係。

map也是有不能儲存的資料 只要該資料不能夠互相比較大小那麼就不能使用map儲存. 那麼為什麼呢?

這裡是由於map容器底層是使用搜尋樹來儲存資料的,所以你在構建搜尋樹的時候需要不停的比較大小,這就是原因.而這裡使用的搜

索樹是較為成熟的紅黑樹,正因為底層是紅黑色所以map的查詢,刪除,插入的效率都很高.

//(1)建構函式

map(const pred& comp = pred(), const a& al = a());//建立空對映map(const map& x);

//拷貝建構函式

map(const value_type *first, const value_type *last,const pred& comp = pred(), const a& al = a());//拷貝[first,last)之間元素構成新對映

multimap(const pred& comp = pred(), const a& al = a());//建立空對映

multimap(const multimap& x);// 拷貝建構函式

multimap(const value_type *first, const value_type *last, const pred& comp = pred(), const a& al = a());//拷貝[first,last)之間元素構成新對映

//(2)大小、判斷空函式

int size() const ;//返回容器元素個數

bool empty() const ;//判斷容器是否空,若返回true,表明容器已空

//(3)增加、刪除函式

iterator insert(const value_type& x); // 插入元素x

iterator insert(iterator it, const value_type& x); //在迭代指標it處插入元素x

void insert(const value_type *first, const value_type *last);//插入[first,last)間元素

iterator erase(iterator it); // 刪除迭代指標it處元素

iterator erase(iterator first, iterator last);// 刪除[first, last)迭代指標間元素

size_type erase(const key& key); // 刪除鍵值等於key的元素

//(4)遍歷函式

iterator begin(); // 返回首元素的迭帶器指標

iterator end(); // 返回尾元素後的迭帶器指標,而不是尾元素的迭帶器指標

reverse_iterator rbegin(); // 返回尾元素的逆向迭帶器指標,用於逆向遍歷容器

reverse_iterator rend(); // 返回首元素前的逆向迭帶器指標,用於逆向遍歷容器

//(5)操作函式

const_iterator lower_bound(const key& key);//返回鍵值等於key迭代指標,否則返回end()

const_iterator upper_bound(const key& key);//

int count(const key& key) const;//返回容器中鍵值等於key的元素個數

pairequal_range(const key& key) const;//返回容器中鍵值等於key的迭代指標[first, last)

const_iterator find(const key& key) const;//查詢功能,返回鍵值等於key迭代器指標

void swap(map& s);// 交換單對映元素

void swap(multimap& s);// 交換多對映元素

//(6)特殊函式

reference operator(const key& k);//僅用在單對映map類中,可以以陣列的形式給對映新增鍵---值對,並可返回值的引用。

#include #include #include using namespace std;

void display(map& m)

}void main()

#include #include #include using namespace std ;

void main()

else

s = mymap["6-1"];

if(s.size()>0)

else

}

multimap

不支援下標運算子,因為鍵並不能確定乙個唯一元素。

如果使用 multimap 容器,幾乎可以肯定它會包含鍵重複的元素;否則,就應該使用 map。一般來說,我們想訪問給定鍵對應的所有元素。成員函式 equal_range() 就可以做到這一點。它會返回乙個封裝了兩個迭代器的 pair 物件,這兩個迭代器所確定範圍內的元素的鍵和引數值相等。例如:

auto pr = people.equal_range("ann");

if(pr.first != std::end(people))

假設公司雇員屬性有:雇員姓名(沒有重複的姓名)、部門名稱。編制管理雇員的集合類,僅包含:(1)新增雇員功能;(2)顯示功能,要求按部門名稱公升序排列,若部門名相同,則姓名按公升序排列。

分析:應該利用集合類,在新增雇員時,直接完成先按部門公升序排列,再按姓名公升序排列,即在恰當的位置過載operator《運算子,完成自定義排序規則功能。由於乙個部門可以有許多雇員,因此應當採用multiset類。設雇員基本類為cemployee,雇員集合類為cmanage。則**如下所示。

#include #include #include using namespace std ;

class cemployee //雇員基礎類

bool operator<(const cemployee& e) const //定義新增介面

return mark;

}string getname()

string getdepart()

};class cmanage //雇員集合維護類

void show()

}};void main()//測試main函式

STL系列之map 對映

include using namespace std 使用命名空間,以便省略變數std map的寫法mapmapnew key 和value可以是任意需要的資料型別。mapnew.insert pair 24,輔導輔導輔導 mapnew.insert map value type 755,dwdw...

map 初步學習STL

map get allocator include include includeusing namespace std int main int psize mapmymap pair p allocate an array of 5 elements using mymap s allocato...

STL十大容器 之 對映 map

1 map的儲存其實是有序二叉樹 紅黑樹 2 儲存鍵值對 例項化時需要傳遞兩個型別 乙個鍵key的型別 另乙個是值value型別 3 key唯一,相同的key只會存在一條記錄 4 key有序,插入指定位置 遍歷時有序 1 插入 pairinsert const pair val pair key,v...