網站首頁 編程語言 正文
前言
為什么這兩天在研究C++的容器呢,因為刷題的時候碰見了幾個不擅長的題,得用STL中的幾種容器才能解出來,所以也是動力滿滿呀,希望能盡快轉過頭去把那幾個題給寫出來,哈哈哈,當然,解題思路和過程后續我也會分享出來。話不多說,老規矩,
使用map容器要包含頭文件#include<map>
1,map基本概念
簡介:
? map中所有元素都是pair(成對出現的數)
? pair中第一個元素為key(鍵值),起到索引的作用,第二個元素為value(實值)
? 所有的元素都會根據元素的鍵值自動排序
本質:
? map/multimap屬于關聯式容器,底層結構是用二叉樹實現的
優點:
? 可以根據key值快速找到value值
map和multimap的區別:
? map不允許容器中有重復的key值元素
? multimap允許容器中有重復的key值元素
2,map構造和賦值
功能描述:?
? 對map容器進行構造和賦值操作
代碼實現:
#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() { //創建map容器 1,默認構造 map<int, int>m; //要寫兩個數據類型 m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(3, 30)); //與插入的順序無關 m.insert(pair<int, int>(2, 20)); //容器會根據key值進行自動排序 m.insert(pair<int, int>(4, 40)); printMap(m); //2,拷貝構造 map<int, int>m2(m); printMap(m2); //3,賦值 map<int, int>m3; m3 = m2; //等號方式賦值 printMap(m3); } int main() { test01(); return 0; }
3,大小和交換
功能描述:
?? 統計map容器大小以及交換map容器
函數原型:
size(); //返回容器中元素的個數
empty(); //bool類型,判斷容器是否為空
swap(st); //交換兩個集合容器
4,插入和刪除
功能描述:
? map容器進行插入和刪除數據
代碼實現:
#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)); //不用寫模板參數 //第三種插入 m.insert(map<int, int>::value_type(3, 30)); //第四種插入 m[4] = 40; //第一種刪除 m.erase(m.begin()); //參數為迭代器 //第二種刪除 m.erase(1); //按照key刪除 //第三種刪除 m.erase(m.begin(), m.end()); //區間刪除 //第四種刪除 m.clear(); //全部刪除 } int main() { test01(); return 0; }
5,查找和統計
功能描述:
? 對map容器進行查找數據以及統計數據
函數原型:
? find(key);
/*查找key是否存在,若存在,返回該元素的迭代器;
若不存在,返回end()迭代器*/
? count(key);???? // 統計key的元素個數
/*map不允許插入重復key值,count統計結果要么是0,要么是1
multimap的count統計結果可能大于1*/
6,排序
? map容器默認的排序方式是,按照key值進行從小到大的排序,但是我們可以利用仿函數實現從大到小排序,話不多說,直接上代碼
#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; //加入仿函數 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; }
另外,對于自定義數據類型,map必須要指定排序規則。
總結
原文鏈接:https://blog.csdn.net/m0_63134260/article/details/122851188
相關推薦
- 2022-10-22 PostgreSql生產級別數據庫安裝要注意事項_PostgreSQL
- 2022-11-06 Nginx如何配置多個服務域名解析共用80端口詳解_nginx
- 2022-08-20 Python數據讀寫之Python讀寫CSV文件_python
- 2023-08-01 前端傳遞對象數組,后端使用list接收并解析
- 2022-04-16 python隊列基本操作和多線程隊列_python
- 2022-05-06 C語言結構體使用之鏈表_C 語言
- 2022-04-12 el-form表單驗證的一些方法總結
- 2022-11-01 redux功能強大的Middleware中間件使用學習_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支