C++進階學習:STL常用容器--map/multimap容器

1. map 容器基本概念

map 中所有元素都是 pair

pair 中第一個元素為 key (鍵值) 起到索引運用? 第二個元素為 value(實值)

所有元素都會根據元素的鍵值自動排序

本質:

??map/multimap 屬于關聯式容器? 底層結構是用二叉樹實現

優點:

? 可以根據 key 值快速找到 value 值

map 和 multimap 的區別:

??map 中不允許有重復的key值

? multimap?中允許有重復的key值

2. map 構造和賦值

功能描述:

對 map 容器進行構造和賦值操作

map 容器中所有數據都是成對出現的? 插入時要使用對組

代碼示例

#include<iostream>
using namespace std;
#include<string>
#include<map>//set 容器排序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 容器map<int, int> m;m.insert(pair<int, int>(3, 30));m.insert(pair<int, int>(4, 40));m.insert(pair<int, int>(1, 10));m.insert(pair<int, int>(2, 20));printMap(m);  //按照 key 值自動排序//拷貝構造map<int, int>m2(m);printMap(m2);//賦值map<int, int>m3;m3 = m2;printMap(m3);
}int main()
{test01();system("pause");return 0;
}

3. map 大小和交換

功能描述:

統計 map 容器大小以及交換 map 容器

代碼示例

#include<iostream>
using namespace std;
#include<string>
#include<map>//set 容器排序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<int, int> m;m.insert(pair<int, int>(3, 30));m.insert(pair<int, int>(4, 40));m.insert(pair<int, int>(1, 10));m.insert(pair<int, int>(2, 20));if (m.empty()){cout << "m 為空" << endl;}else{cout << "m 不為空" << endl;;cout << "m 的大小為:" << m.size() << endl;  //4}}void test02()
{map<int, int> m1;m1.insert(pair<int, int>(3, 30));m1.insert(pair<int, int>(4, 40));m1.insert(pair<int, int>(1, 10));m1.insert(pair<int, int>(2, 20));map<int, int> m2;m2.insert(pair<int, int>(5, 50));m2.insert(pair<int, int>(6, 60));m2.insert(pair<int, int>(7, 70));m2.insert(pair<int, int>(8, 80));cout << "交換前" << endl;printMap(m1);printMap(m2);m1.swap(m2);cout << "交換后" << endl;printMap(m1);printMap(m2);
}int main()
{test01();test02();system("pause");return 0;
}

4. map 插入和刪除

功能描述:

map 容器進行數據的插入和刪除操作

代碼示例

#include<iostream>
using namespace std;
#include<string>
#include<map>//map 容器插入和刪除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<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;//[]不建議插入  但可以利用key訪問到value//cout<<map[4]<<endl;printMap(m);//刪除m.erase(m.begin());printMap(m);m.erase(3);  //按照 key 刪除printMap(m);m.erase(m.begin(), m.end());printMap(m);m.clear();printMap(m);
}int main()
{test01();system("pause");return 0;
}

5. map 查找和統計

功能描述:

對 map 容器進行查找和統計操作

查找? --? find()? 返回的是一個迭代器

統計? --? count()? 對于map容器? 結果為0或1

代碼示例

#include<iostream>
using namespace std;
#include<string>
#include<map>//map 容器插入和刪除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<int,int> m;m.insert(pair<int, int>(1, 10));m.insert(pair<int, int>(2, 20));m.insert(pair<int, int>(3, 30));m.insert(pair<int, int>(4, 40));map<int, int>::iterator pos = m.find(3);if (pos != m.end()){cout << "找到了元素:" << pos->first << " value = " << pos->second << endl;}else {cout << "沒有找到" << endl;}//統計int num = m.count(3);  //map 不允許插入重復key元素,所以統計結果只有0或1cout << "num = " << num << endl;  //1
}int main()
{test01();system("pause");return 0;
}

6. map 容器排序

功能描述:

對 map 容器中的元素進行排序

利用仿函數可以指定 map 容器的排序規則

對于自定義數據類型? map 容器必須指定排序規則

代碼示例

#include<iostream>
using namespace std;
#include<string>
#include<map>//map 容器插入和刪除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));m.insert(make_pair(5, 50));for (map<int, int,MyCompare>::iterator it = m.begin();it != m.end();it++){cout << "key = " << it->first << " value = " << it->second << endl;}cout << endl;
}int main()
{test01();system("pause");return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80801.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80801.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80801.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

let,const,var關鍵字的區別

let,const,var關鍵字 let&#xff0c;const&#xff0c;var都存在變量提升 它們都存在變量提升但是稍微有點不同 var變量聲明會被提升到作用域的頂部&#xff0c;并且會被初始化為 undefinedlet 和 const&#xff1a;變量聲明也會被提升到作用域的頂部&#xff0c;但不會被初…

Nuitka 已經不再安全? Nuitka/Cython 打包應用逆向工具 -- pymodhook

pymodhook是一個記錄任意對Python模塊的調用的庫&#xff0c;用于Python逆向分析。 pymodhook庫類似于Android的xposed框架&#xff0c;但不僅能記錄函數的調用參數和返回值&#xff0c;還能記錄模塊的類的任意方法調用&#xff0c;以及任意派生對象的訪問&#xff0c;基于pyob…

path環境變量滿了如何處理,分割 PATH 到 Path1 和 Path2

要正確設置 Path1 的值&#xff0c;你需要將現有的 PATH 環境變量 中的部分路徑復制到 Path1 和 Path2 中。以下是詳細步驟&#xff1a; 步驟 1&#xff1a;獲取當前 PATH 的值 打開環境變量窗口&#xff1a; 按 Win R&#xff0c;輸入 sysdm.cpl&#xff0c;點擊 確定。在 系…

SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理標準)-(一)

1 目的 物料(例如晶圓)加工在設備中的自動化管理與控制是實現工廠自動化的關鍵要素。本標準針對半導體制造環境中與設備內部物料處理相關的通信需求進行了規范。本標準規定了在加工單元接收到的指定材料所應適用的加工方法(例如Etch腔室需要Run哪支Recipe)。它闡述了物料加工的…

【Hadoop】集群搭建實戰:超詳細保姆級教程

&#x1f407;明明跟你說過&#xff1a;個人主頁 &#x1f3c5;個人專欄&#xff1a;《大數據前沿&#xff1a;技術與應用并進》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目錄 一、引言 1、Hadoop簡介 2、Hadoop集群概念 3、 Hadoop 集…

阿里云人工智能大模型通義千問Qwen3開發部署

本文主要描述阿里云人工智能大模型開源社區ModelScope提供的通義千問Qwen3開發部署。 與阿里云一起 輕松實現數智化 讓算力成為公共服務&#xff1a;用大規模的通用計算&#xff0c;幫助客戶做從前不能做的事情&#xff0c;做從前做不到的規模。讓數據成為生產資料&#xff1a;…

24.(vue3.x+vite)引入組件并動態掛載(mount)

示例截圖 組件代碼: <template><div><div>{{message }}</div>

《Python星球日記》 第56天:循環神經網絡(RNN)入門

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、序列數據的特點與挑戰1. 什么是序列數據?2. 序列數據的挑戰二、RNN 的基本結構與前向傳播1. RNN的核心理念2. RNN的數學表達3. RNN的前向傳…

手寫 vue 源碼 === computed 實現

目錄 計算屬性的基本概念 計算屬性的核心實現 ComputedRefImpl 類的實現 ReactiveEffect 與計算屬性的關系 計算屬性的工作流程 1. 創建計算屬性 2. 依賴收集過程 3. 嵌套 effect 的處理 4. 更新過程 嵌套 effect 關系圖解 依賴關系建立過程 代碼實現分析 1. 創建…

【Lattice FPGA 開發】Diamond在線調試Reveal邏輯亂跳的解決

在Vivado中在always塊中寫邏輯時如果出現always塊中的異步復位敏感詞在塊內部未使用的情況&#xff0c;如下例的rst&#xff1a; always (posedge clk or posedge rst) begin if(~tx_sense_flag)o_rd_adr < d1;else if((o_rd_adr d94) & (bit_cnt d7))o_rd_adr <…

【hadoop】Sqoop數據遷移工具的安裝部署

一、Sqoop安裝與配置 步驟&#xff1a; 1、使用XFTP將Sqoop安裝包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz發送到master機器的主目錄。 2、解壓安裝包&#xff1a; tar -zxvf ~/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 3、修改文件夾的名字&#xff0c;將其改為s…

BUUCTF——PYWebsite

BUUCTF——PYWebsite 進入靶場 看看基本信息 沒有什么信息 掃個目錄看看 http://node5.buuoj.cn:28115/.DS_Store http://node5.buuoj.cn:28115/flag.php http://node5.buuoj.cn:28115/index.html訪問flag.php 提示保存購買者的IP 抓包看看 直接XFF偽造一下 X-Forwarded-F…

基于Qt開發的多線程TCP服務端

目錄 一、Qt TCP服務端開發環境準備1. 項目配置2. 核心類說明二、服務端搭建步驟詳解步驟1:初始化服務端對象步驟2:啟動端口監聽步驟3:處理客戶端連接三、數據通信與狀態管理1. 數據收發實現2. 客戶端狀態監控四、進階功能擴展1. 多客戶端并發處理2. 心跳檢測機制五、調試與…

【Tools】VScode使用CMake構建項目

這里寫目錄標題 vscode 使用 CMake**安裝插件**新建CMake項目 vscode 使用 CMake 安裝插件 CMake和CMake Tools c等等 CMake插件主要功能是CMake語法高亮、自動補全CMake Tools的功能主要是結合VSCode IDE使用CMake這個工具&#xff0c;比如生成CMake項目、構建CMake項目等…

neo4j圖數據庫基本概念和向量使用

一.節點 1.新建節點 create (n:GroupProduct {name:都邦高保額團意險,description: "保險產品名稱"} ) return n CREATE&#xff1a;Neo4j 的關鍵字&#xff0c;用于創建新節點或關系。 (n:GroupProduct)&#xff1a; n 是節點的臨時別名&#xff08;變量名&#…

2025年滲透測試面試題總結-滲透測試紅隊面試八(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 滲透測試紅隊面試八 二百一十一、常見中間件解析漏洞利用方式 二百一十二、MySQL用戶密碼存儲與加密 …

大語言模型主流架構解析:從 Transformer 到 GPT、BERT

&#x1f4cc; 友情提示&#xff1a; 本文內容由銀河易創AI&#xff08;https://ai.eaigx.com&#xff09;創作平臺的gpt-4-turbo模型生成&#xff0c;旨在提供技術參考與靈感啟發。文中觀點或代碼示例需結合實際情況驗證&#xff0c;建議讀者通過官方文檔或實踐進一步確認其準…

Java設計模式之裝飾器模式:從基礎到高級的全面解析(萬字解析)

裝飾器模式(Decorator Pattern)是一種結構型設計模式,它允許向一個現有的對象添加新的功能,同時又不改變其結構。這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。 一、裝飾器模式基礎概念 1.1 什么是裝飾器模式 裝飾…

RN 鴻蒙混合開發實踐(踩坑)

#三方框架# #React Native # 1 。環境配置&#xff1b; 安裝 DevEco 開發工具&#xff1b; Node 版本16&#xff1b; hdc環境配置 hdc 是 OpenHarmony 為開發人員提供的用于調試的命令行工具&#xff0c;鴻蒙 React Native 工程使用 hdc 進行真機調試。hdc 工具通過 OpenHa…

動態網站 LNMP

一、名詞解釋&#xff1a; LNMP&#xff1a; L : 代表 Linux 操作系統&#xff0c;為網站提供了可靠的運行環境N : 代表 Nginx&#xff0c;它是一款輕量級的高性能 Web 服務器&#xff0c;能夠快速處理大量并 發連接&#xff0c;有效提升網站的訪問速度和性能 M : 代表…