STL學習2常用容器2 8map multimap

2021-09-11 14:56:44 字數 2783 閱讀 2721

1、關聯式容器,key和value每個元素都是對組

2、所有元素根據元素的鍵值自動排序,所有元素都是pair同時擁有實值和鍵值,其中第乙個元素為鍵值,第二個為實值,可以允許 兩個元素的實值相同,不允許鍵值相同,可以通過迭代器改變元素的實值不能改變鍵值

3、map與list擁有相同的某些性質,在進行元素的新增insert和刪除erase操作時,操作之前的所有迭代器在操作完成之後依然有效(被刪除元素的迭代器除外)

4、map與multimap操作類似,除multimap鍵值可以重複

5、map與multimap都是紅黑樹為底層實現機制

6、插入 四種方式

6.1    m.insert(pair(1, 10));

6.2   m.insert(make_pair (2, 20));

6.3 m.insert(map::value_type(3, 30));

6.4 m[4] = 40;

7、刪除 m.erase(3)按照key鍵值刪除對應的元素

8、查詢 find 通過key值查詢對應的元素

map::iterator pos = m.find(3);

9、lower_bound(keyelem) 返回第乙個key>=keyelem元素的迭代器

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

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

10、改變map容器的排序規則

11、api介面測試

#include "pch.h"

#include #include//map與multimap

using namespace std;

void test01()

//cout<::iterator it="m.begin();" m.end>

*/}void test02()

*/ //查詢

//通過key值查詢對應的元素

map::iterator pos = m.find(3);

if (pos != m.end())

//統計

//通過key值查詢對應的元素

int num = m.count(4);

cout << "key為4的元素個數為: " << num << endl;

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

map::iterator ret = m.lower_bound(3);

if (ret != m.end())

else

//upper_bound(keyelem)返回第乙個key>keyelem元素的迭代器

map::iterator ret2 = m.upper_bound(3);

if (ret2 != m.end())

else

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

pair < map::iterator, map::iterator > it2= m.equal_range(3);

if (it2.first != m.end()) };

void test03()

}int main()

12、案例

//建立部門

enum department ;

class staff

};void showstaff(const staff&s)

/*void printstaff1(const multimap&s)

}void printstaff2(const multimap&s)

}void printstaff3(const multimap&s)

}void printstaff_all(const multimap&s)

}*///講解分部門顯示實現 用find找到部門起始人員 用count統計部門人數

void showstaff(multimap&m)

cout << "finacial_depatment:" << endl;

multimap::iterator it1 = m.find(finacial_depatment);

for (unsigned int index = 0; it1 != m.end(), index < m.count(finacial_depatment); it1++, index++)

cout << "develop_depatment:" << endl;

multimap::iterator it2 = m.find(develop_depatment);

for (unsigned int index = 0; it2 != m.end(), index < m.count(develop_depatment); it2++, index++)

cout << "all_depatmen: " << endl;

for (multimap::const_iterator it3 = m.begin(); it3 != m.end(); it++) }

int main()

STL容器類map學習

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

C 學習筆記 STL常用容器 set和map

set 所有元素在插入時自動排序,底層結構用二叉樹實現。set和multiset的區別 set不允許容器中有重複的元素,multiset允許容器中有重複的元素。set構造和賦值 構造 預設建構函式 setst 拷貝建構函式 set const set st 賦值 過載等號操作符 set operat...

STL學習2常用容器2 7set multiset

一 set容器 1 關聯式容器,內部插入資料時候自動排序,不允許插入重複的key值 2 set multiset容器不可以通過迭代器修改裡面的元素,因為預設有了排序規則,其底層實現是紅黑樹,紅黑樹是平衡二叉樹的一種 3 樹的簡單知識 3.1二叉樹 任何節點最多隻允許有兩個子節點,分別為左子節點和右子...