STL之map容器和multimap容器

2022-08-02 07:09:14 字數 2779 閱讀 5891

所有元素都會根據元素的鍵值自動排序。map所有的元素都是pair,同時擁有實值和鍵值,pair的第一元素被視為鍵值,第二元素被視為實值,map不允許兩個元素有相同的鍵值。

map的鍵值關係到map元素的排列規則,任意改變map鍵值將會嚴重破壞map組織。如果想要修改元素的實值,那麼是可以的。

map和list擁有相同的某些性質,當對它的容器元素進行新增操作或者刪除操作時,操作之前的所有迭代器,在操作完成之後依然有效,當然被刪除的那個元素的迭代器必然是個例外。

multimap和map的操作類似,唯一區別multimap鍵值可重複。

map和multimap都是以紅黑樹為底層實現機制。

api意義

建構函式

mapmaptt

map預設建構函式

map(const map &mp)

拷貝建構函式

賦值操作

map& operator=(const map &mp)

過載等號操作符

swap(mp)

交換兩個集合容器

大小操作

size()

返回容器中元素的數目

empty()

判斷容器是否為空

插入資料元素操作

map.insert(...); //往容器插入元素,返回pair

mapmapstu;

往容器插入元素,返回pairmapmapstu;

第一種 通過pair的方式插入物件

mapstu.insert(pair(3, "小張"));

第二種 通過pair的方式插入物件

mapstu.inset(make_pair(-1, "校長"))

第三種 通過value_type的方式插入物件

mapstu.insert(map::value_type(1, "小李"))

第四種 通過陣列的方式插入值

mapstu[3] = "小劉";mapstu[5] = "小王";

刪除操作

clear()

刪除所有元素

erase(pos)

刪除pos迭代器所指的元素,返回下乙個元素的迭代器

erase(beg,end)

刪除區間[beg,end)的所有元素 ,返回下乙個元素的迭代器

erase(keyelem)

刪除容器中key為keyelem的對組

查詢操作

find(key)

查詢鍵key是否存在,若存在,返回該鍵的元素的迭代器;/若不存在,返回map.end()

count(keyelem)

返回容器中key為keyelem的對組個數。對map來說,要麼是0,要麼是1。對multimap

來說,值可能大於1

lower_bound(keyelem)

返回第乙個key>=keyelem元素的迭代器

upper_bound(keyelem)

返回第乙個key>keyelem元素的迭代器

equal_range(keyelem)

返回容器中key與keyelem相等的上下限的兩個迭代器

1 #include 2 #include3 #include 4

5using

namespace

std;67

void

test01()

1819

if(m.empty())

2023

else

2427}28

29void

test02()

4142 map::iterator pos = m.find(2); //

查詢43

if (pos !=m.end())

4447

else

4851

52int num = m.count(3); //

map的count 要麼0 要麼1

53 cout << "

num =

"<< num <5455

//lower_bound(keyelem);

//返回第乙個key>=keyelem元素的迭代器。

5657 map::iterator ret = m.lower_bound(3

);58

if (ret !=m.end())

5962

else

6366

67//

upper_bound(keyelem);

//返回第乙個key>keyelem元素的迭代器。

68 ret = m.upper_bound(3

);69

if (ret !=m.end())

7073

else

7477

78//

equal_range(keyelem);

//返回容器中key與keyelem相等的上下限的兩個迭代器。

7980 pairint, int>::iterator, map::iterator> ret2 = m.equal_range(3

);81

82if (ret2.first !=m.end())

8386

else

8790

91if (ret2.second !=m.end())

9295

else

9699

}100

bool mycompare(int &v1, int &v2)

103104

intmain()

STL之map容器和multimap容器

所有元素都會根據元素的鍵值自動排序。map所有的元素都是pair,同時擁有實值和鍵值,pair的第一元素被視為鍵值,第二元素被視為實值,map不允許兩個元素有相同的鍵值。map的鍵值關係到map元素的排列規則,任意改變map鍵值將會嚴重破壞map組織。如果想要修改元素的實值,那麼是可以的。map和l...

STL關聯容器之map

map和set一樣,也是一種關聯容器,內部也是使用紅黑樹作為底層的實現結構。但是不同的是,map的鍵值和實值可以是不一樣的。map與set的查詢操作本質上是一樣的,沒有特殊的地方。map使用鍵值排列元素的位置,因而也不允許插入相同鍵值的元素,插入演算法返回pair iterator,bool 分別指...

STL容器類map學習

map類定義了乙個關聯容器,並且在容器中使用唯一的關鍵字 任何兩個元素的鍵都不相同 來對映相應的值。從本質上來說,關鍵字就是值的名字。在map物件中儲存了乙個值之後,就可以通過關鍵字來獲得它。map物件是一系列關鍵字 值的匹配對。map的主要功能在於 只有你知道了乙個值的關鍵字,就能夠找到這個值。例...