網(wǎng)站首頁 編程語言 正文
前言
為什么這兩天在研究C++的容器呢,因?yàn)樗㈩}的時(shí)候碰見了幾個(gè)不擅長(zhǎng)的題,得用STL中的幾種容器才能解出來,所以也是動(dòng)力滿滿呀,希望能盡快轉(zhuǎn)過頭去把那幾個(gè)題給寫出來,哈哈哈,當(dāng)然,解題思路和過程后續(xù)我也會(huì)分享出來。話不多說,老規(guī)矩,
使用map容器要包含頭文件#include<map>
1,map基本概念
簡(jiǎn)介:
? map中所有元素都是pair(成對(duì)出現(xiàn)的數(shù))
? pair中第一個(gè)元素為key(鍵值),起到索引的作用,第二個(gè)元素為value(實(shí)值)
? 所有的元素都會(huì)根據(jù)元素的鍵值自動(dòng)排序
本質(zhì):
? map/multimap屬于關(guān)聯(lián)式容器,底層結(jié)構(gòu)是用二叉樹實(shí)現(xiàn)的
優(yōu)點(diǎn):
? 可以根據(jù)key值快速找到value值
map和multimap的區(qū)別:
? map不允許容器中有重復(fù)的key值元素
? multimap允許容器中有重復(fù)的key值元素
2,map構(gòu)造和賦值
功能描述:?
? 對(duì)map容器進(jìn)行構(gòu)造和賦值操作
代碼實(shí)現(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,默認(rèn)構(gòu)造 map<int, int>m; //要寫兩個(gè)數(shù)據(jù)類型 m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(3, 30)); //與插入的順序無關(guān) m.insert(pair<int, int>(2, 20)); //容器會(huì)根據(jù)key值進(jìn)行自動(dòng)排序 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; //等號(hào)方式賦值 printMap(m3); } int main() { test01(); return 0; }
3,大小和交換
功能描述:
?? 統(tǒng)計(jì)map容器大小以及交換map容器
函數(shù)原型:
size(); //返回容器中元素的個(gè)數(shù)
empty(); //bool類型,判斷容器是否為空
swap(st); //交換兩個(gè)集合容器
4,插入和刪除
功能描述:
? map容器進(jìn)行插入和刪除數(shù)據(jù)
代碼實(shí)現(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)計(jì)
功能描述:
? 對(duì)map容器進(jìn)行查找數(shù)據(jù)以及統(tǒng)計(jì)數(shù)據(jù)
函數(shù)原型:
? find(key);
/*查找key是否存在,若存在,返回該元素的迭代器;
若不存在,返回end()迭代器*/
? count(key);???? // 統(tǒng)計(jì)key的元素個(gè)數(shù)
/*map不允許插入重復(fù)key值,count統(tǒng)計(jì)結(jié)果要么是0,要么是1
multimap的count統(tǒng)計(jì)結(jié)果可能大于1*/
6,排序
? map容器默認(rèn)的排序方式是,按照key值進(jìn)行從小到大的排序,但是我們可以利用仿函數(shù)實(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++) {//輸出的時(shí)候別忘了加上 cout << "key=" << it->first << " value=" << it-> second << endl; } } int main() { test01(); return 0; }
另外,對(duì)于自定義數(shù)據(jù)類型,map必須要指定排序規(guī)則。
總結(jié)
原文鏈接:https://blog.csdn.net/m0_63134260/article/details/122851188
相關(guān)推薦
- 2022-07-16 uniCloud云開發(fā)獲取小程序用戶openid
- 2022-08-15 C語言實(shí)現(xiàn)字符串的部分匹配算法
- 2022-07-28 XML基本概念XPath、XSLT與XQuery函數(shù)介紹_XML/RSS
- 2022-10-16 Ant?Design?組件庫(kù)之步驟條實(shí)現(xiàn)_React
- 2021-12-06 Windows下在CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法_Golang
- 2022-04-11 K8S部署Kafka界面管理工具(kafkamanager)方法詳解_云其它
- 2023-12-26 錯(cuò)誤代碼: 1231Variable ‘sql_notes‘ can‘t be set to the
- 2022-12-28 Qt開發(fā)之QTreeWidget的使用教程詳解_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支