C++中不得不說的map容器
前言
為什么這兩天在研究C++的容器呢,因為刷題的時候碰見了幾個不擅長的題,得用STL中的幾種容器才能解出來,所以也是動力滿滿呀,希望能盡快轉(zhuǎn)過頭去把那幾個題給寫出來,哈哈哈,當然,解題思路和過程后續(xù)我也會分享出來。話不多說,老規(guī)矩,
使用map容器要包含頭文件#include<map>
1,map基本概念
簡介:
map中所有元素都是pair(成對出現(xiàn)的數(shù))
pair中第一個元素為key(鍵值),起到索引的作用,第二個元素為value(實值)
所有的元素都會根據(jù)元素的鍵值自動排序
本質(zhì):
map/multimap屬于關聯(lián)式容器,底層結(jié)構(gòu)是用二叉樹實現(xiàn)的
優(yōu)點:
可以根據(jù)key值快速找到value值
map和multimap的區(qū)別:
map不允許容器中有重復的key值元素
multimap允許容器中有重復的key值元素
2,map構(gòu)造和賦值
功能描述:
對map容器進行構(gòu)造和賦值操作
代碼實現(xiàn):
#include<iostream> #include<map> using namespace std; void printMap(map<int, int>& m) { for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { cout << "key=" << (*it).first << " value=" << (*it).second << endl; } cout << endl; } void test01() { //創(chuàng)建map容器 1,默認構(gòu)造 map<int, int>m; //要寫兩個數(shù)據(jù)類型 m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(3, 30)); //與插入的順序無關 m.insert(pair<int, int>(2, 20)); //容器會根據(jù)key值進行自動排序 m.insert(pair<int, int>(4, 40)); printMap(m); //2,拷貝構(gòu)造 map<int, int>m2(m); printMap(m2); //3,賦值 map<int, int>m3; m3 = m2; //等號方式賦值 printMap(m3); } int main() { test01(); return 0; }
3,大小和交換
功能描述:
統(tǒng)計map容器大小以及交換map容器
函數(shù)原型:
size(); //返回容器中元素的個數(shù)
empty(); //bool類型,判斷容器是否為空
swap(st); //交換兩個集合容器
4,插入和刪除
功能描述:
map容器進行插入和刪除數(shù)據(jù)
代碼實現(xiàn):
#include<iostream> #include<map> using namespace std; void test01() { map<int, int>m; //第一種插入 m.insert(pair<int, int>(1, 10)); //第二種插入 m.insert(make_pair(2, 20)); //不用寫模板參數(shù) //第三種插入 m.insert(map<int, int>::value_type(3, 30)); //第四種插入 m[4] = 40; //第一種刪除 m.erase(m.begin()); //參數(shù)為迭代器 //第二種刪除 m.erase(1); //按照key刪除 //第三種刪除 m.erase(m.begin(), m.end()); //區(qū)間刪除 //第四種刪除 m.clear(); //全部刪除 } int main() { test01(); return 0; }
5,查找和統(tǒng)計
功能描述:
對map容器進行查找數(shù)據(jù)以及統(tǒng)計數(shù)據(jù)
函數(shù)原型:
find(key);
/*查找key是否存在,若存在,返回該元素的迭代器;
若不存在,返回end()迭代器*/
count(key); // 統(tǒng)計key的元素個數(shù)
/*map不允許插入重復key值,count統(tǒng)計結(jié)果要么是0,要么是1
multimap的count統(tǒng)計結(jié)果可能大于1*/
6,排序
map容器默認的排序方式是,按照key值進行從小到大的排序,但是我們可以利用仿函數(shù)實現(xiàn)從大到小排序,話不多說,直接上代碼
#include<iostream> #include<map> using namespace std; class MyCompare { public: bool operator()(int v1,int v2)const { return v1 > v2; //降序 } }; void test01() { map<int, int, MyCompare>m; //加入仿函數(shù) m.insert(make_pair(1, 10)); m.insert(make_pair(2, 20)); m.insert(make_pair(3, 30)); m.insert(make_pair(4, 40)); for (map<int, int,MyCompare>::iterator it = m.begin(); it != m.end(); it++) {//輸出的時候別忘了加上 cout << "key=" << it->first << " value=" << it-> second << endl; } } int main() { test01(); return 0; }
另外,對于自定義數(shù)據(jù)類型,map必須要指定排序規(guī)則。
總結(jié)
到此這篇關于C++中不得不說的map容器的文章就介紹到這了,更多相關C++ map容器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C語言驅(qū)動開發(fā)之通過ReadFile與內(nèi)核層通信
驅(qū)動與應用程序的通信是非常有必要的,內(nèi)核中執(zhí)行代碼后需要將其動態(tài)顯示給應用層。為了實現(xiàn)內(nèi)核與應用層數(shù)據(jù)交互則必須有通信的方法,微軟為我們提供了三種通信方式,本文先來介紹通過ReadFile系列函數(shù)實現(xiàn)的通信模式2022-09-09