C++ map容器總結

map基本概念

簡介:

  • map中所有元素都是pair

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

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

本質:

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

優點:

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

map和multimap區別:

  • map不允許容器中有重復key值元素

  • multimap允許容器中有重復key值元素

map構造和賦值

功能描述:

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

函數原型:

  • map<T1 T2> mp; //map默認構造函數

  • map(const map &mp); //拷貝構造函數

賦值:

  • map& operator=(const map &mp); //重載等號操作符

map大小和交換

功能描述:

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

函數原型:

  • size(); //返回容器中元素的數目

  • empty(); //判斷容器是否為空

  • swap(st); //交換兩個集合容器

map插入和刪除

功能描述:

  • map容器進行插入數據和刪除數據

函數原型:

  • insert(elem); // 在容器中插入元素。

//四種插入方法
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));
//第四種,不建議使用[]插入,但可以使用[]訪問
//當錯誤的使用 [] 賦值時,會在map中額外的插入一個元素
m[4] = 40;
  • clear(); // 清除所有元素

  • erase(pos); // 刪除pos迭代器所指的元素,返回下一個元素的迭代器。

  • erase(beg, end); // 刪除區間[beg, end)的所有元素,返回下一個元素的迭代器。

  • erase(key); // 刪除容器中值為key的元素。

map查找和統計

功能描述:

  • 對map容器進行查找數據以及統計數據

函數原型:

  • find(key); // 查找key是否存在,若存在,返回該鍵的元素的迭代器;若不存在,返回set.end();

  • count(key); // 統計key的元素個數

  • 查找 --- find (返回的是迭代器)

  • 統計 --- count (對于map,結果為0或者1)

map容器排序

  • map容器默認排序規則為按照key值進行從小到大排序

主要技術點:

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

  • 對于自定義數據類型,map必須要指定排序規則,同set容器

內置數據類型定義仿函數調整map排序方法

#include<iostream>
#include<string>
#include<map>
using namespace std;class myCompare{
public://定義仿函數bool operator()(int a, int b)const{return a > b;}
};
int main(){map<int,string> m1;m1.insert(pair<int,string>(10,"a"));m1.insert(pair<int,string>(20,"b"));m1.insert(pair<int,string>(30,"c"));m1.insert(pair<int,string>(40,"d"));for(map<int,string>::iterator it = m1.begin(); it != m1.end(); it++){cout << it->first << "   " << it ->second << endl; }cout << "--------------------------------" << endl;map<int,string,myCompare> m2;m2.insert(pair<int,string>(10,"a"));m2.insert(pair<int,string>(20,"b"));m2.insert(pair<int,string>(30,"c"));m2.insert(pair<int,string>(40,"d"));for(map<int,string,myCompare>::iterator it = m2.begin(); it != m2.end(); it++){cout << it->first << "   " << it ->second << endl; }
}

?輸出結果如下:

自定義數據類型定義仿函數調整map排序方法

如果不定義仿函數,則無法直接按鍵插入自定義數據類型

#include<iostream>
#include<set>
#include<iostream>
#include<string>
#include<map>
using namespace std;class Person{
public:Person(string name, int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};class comparePerson{
public:// 定義仿函數bool operator()(const Person&p1,const Person&p2)const{return p1.m_Age > p2.m_Age;}
};int main(){Person p1("張三",20);Person p2("李四",21);Person p3("王五",22);Person p4("趙六",23);map<Person,string,comparePerson> m1;m1.insert(pair<Person,string>(p1,"a"));m1.insert(pair<Person,string>(p2,"b"));m1.insert(pair<Person,string>(p3,"c"));m1.insert(pair<Person,string>(p4,"d"));for(map<Person,string,comparePerson>::iterator it = m1.begin(); it != m1.end(); it++){cout << " 姓名:" << it->first.m_Name << " 年齡:" << it->first.m_Age << " 等級:" << it ->second << endl; }}

輸出結果如下:?

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

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

相關文章

【Zookeeper搭建(跟練版)】Zookeeper分布式集群搭建

&#xff08;一&#xff09;克隆前的準備 1. 用 xftp 發送文件 2. 時間同步&#xff1a; sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 3. zookpeeper 安裝 部署 呼應開頭發送的壓縮包&#xff0c;解壓&#xff1a; cd ~ tar -zxvf zookeeper-3.4.6.tar.g…

Flutter項目之頁面實現以及路由fluro

目錄&#xff1a; 1、項目代碼結構2、頁面編寫以及路由配置main.dart(入口文件)page_content.dartindex.dart&#xff08;首頁&#xff09;application.dart&#xff08;啟動加載類&#xff09;pubspec.yaml&#xff08;依賴配置文件&#xff09;login.dart&#xff08;登錄頁&…

記錄Jmeter 利用BeanShell 腳本解析JSON字符串

下載org.json包(文檔說明) #下載地址 https://www.json.org/ # github 地址 https://github.com/stleary/JSON-java # api 文檔說明 https://resources.arcgis.com/en/help/arcobjects-java/api/arcobjects/com/esri/arcgis/server/json/JSONObject.htmlBeanShell腳本 import…

uniapp動態循環表單校驗失敗:初始值校驗

問題現象 &#x1f4a5; 在實現動態增減的單價輸入表單時&#xff08;基于uv-form組件&#xff09;&#xff0c;遇到以下詭異現象&#xff1a; <uv-input>的v-model綁定初始值為數字類型時&#xff0c;required規則失效 ?數字類型與字符串類型校驗表現不一致 &#x1…

UML 圖六種箭頭含義詳解:泛化、實現、依賴、關聯、聚合、組合

目錄 一、泛化&#xff08;Generalization&#xff09; 概念 表示方法 二、實現&#xff08;Realization&#xff09; 概念 表示方法 三、依賴&#xff08;Dependency&#xff09; 概念 表示方法 四、關聯&#xff08;Association&#xff09; 概念 表示方法 五、…

Android Logcat總結

文章目錄 Android Logcat總結日志格式過濾日志正向過濾反向過濾正則過濾日志等級 Android Logcat總結 日志格式 用法&#xff1a; Log.e("TAG", "hello") Log.i("TAG", "hello") Log.d("TAG", "hello")依次為&…

Unity UGUI - 六大基礎組件

目錄 一、Canvas上 1. Canvas&#xff1a;復制渲染子UI控件 2. ?Canvas Scaler?&#xff1a;畫布分辨率自適應 3. Graphics Raycaster&#xff1a;射線事件響應 4. ?Rect Transform?&#xff1a;UI位置錨點對齊 二、Event System上 5. Event System 6. Standalone …

基于Springboot的網上訂餐系統 【源碼】+【PPT】+【開題報告】+【論文】

網上訂餐系統是一個基于Java語言和Spring Boot框架開發的Web應用&#xff0c;旨在為用戶和管理員提供一個便捷的訂餐平臺。該系統通過簡化餐飲訂購和管理流程&#xff0c;為用戶提供快速、高效的在線訂餐體驗&#xff0c;同時也為管理員提供完善的后臺管理功能&#xff0c;幫助…

css 實現閃爍光標

要實現閃爍光標&#xff08;比如文本輸入框內常見的閃爍效果&#xff09;&#xff0c;可以使用 CSS 動畫。下面是一個簡單的方法&#xff1a; 代碼示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta n…

從JVM底層揭開Java方法重載與重寫的面紗:原理、區別與高頻面試題突破

&#x1f31f;引言&#xff1a;一場由方法調用引發的"血案" 2018年&#xff0c;某電商平臺在"雙十一"大促期間遭遇嚴重系統故障。 技術團隊排查發現&#xff0c;問題根源竟是一個繼承體系中的方法重寫未被正確處理&#xff0c;導致訂單金額計算出現指數級…

詳解Spark executor

在 Apache Spark 中&#xff0c;Executor&#xff08;執行器&#xff09; 是運行在集群工作節點&#xff08;Worker Node&#xff09;上的進程&#xff0c;負責執行具體的計算任務并管理數據。它是 Spark 分布式計算的核心組件之一&#xff0c;直接決定了任務的并行度和資源利用…

適配器模式及其典型應用

引言 適配器模式&#xff08;Adapter Pattern&#xff09;是一種結構型設計模式&#xff0c;它允許不兼容的接口協同工作。適配器模式通過創建一個適配器類來轉換一個類的接口&#xff0c;使其能夠與另一個類的接口兼容。這種模式在實際開發中非常有用&#xff0c;特別是在需要…

如何在 Vue 項目中使用v - for指令進行列表渲染,如何優化其性能?

大白話如何在 Vue 項目中使用v - for指令進行列表渲染&#xff0c;如何優化其性能&#xff1f; 在Vue項目里&#xff0c;咱們常常會碰到要把一組數據渲染成列表的狀況。這時候&#xff0c;v-for指令就派上大用場啦&#xff01;它能讓咱們輕松地把數據數組里的每個元素渲染成對…

qt QQuaternion詳解

1. 概述 QQuaternion 是 Qt 中用于表示三維空間中旋轉的四元數類。它包含一個標量部分和一個三維向量部分&#xff0c;可以用來表示旋轉操作。四元數在計算機圖形學中廣泛用于平滑的旋轉和插值。 2. 重要方法 默認構造函數 QQuaternion::QQuaternion(); // 構造單位四元數 (1…

如何將爬取的評論數據存儲到數據庫?

在使用Python爬蟲獲取1688商品評論后&#xff0c;將這些數據存儲到數據庫中是一個常見的需求。這樣可以方便后續的數據分析、查詢和管理。本文將詳細介紹如何將爬取的評論數據存儲到數據庫中&#xff0c;包括MySQL和SQLite兩種常見的數據庫。 一、準備工作 1. 安裝必要的Pytho…

Maven中為什么有些依賴不用引入版本號

先給出一個例子&#xff1a; <parent><artifactId>sky-take-out</artifactId><groupId>com.sky</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>sky-s…

Nginx相關漏洞解析

一、CRLF注入漏洞 原理&#xff1a;Nginx將傳入的url進行解碼&#xff0c;對其中的%0a%0d替換成換行符&#xff0c;導致后面的數據注入至頭部&#xff0c;造成CRLF 注入漏洞 1、開環境 2、訪問網站&#xff0c;并抓包 3、構造請求頭 %0ASet-cookie:JSPSESSID%3D1 這樣就可以…

RUBY報告系統

我們常用GFP及其變體如RFP、YFP、mCherry等作為基因表達的報告蛋白——需要熒光顯微鏡制片觀察&#xff1b;此外還有GUS或熒光素酶作為報告酶——需要添加底物。 RUBY報告系統則與眾不同&#xff0c;其作用原理是&#xff1a;將酪氨酸轉化為鮮艷的紅色甜菜堿&#xff0c;無需使…

[力扣每日一練]關于MySQL和pandas的正則表達式應用

一&#xff1a;題目要求 表&#xff1a;Users-------------------------- | Column Name | Type | -------------------------- | user_id | int | | email | varchar | -------------------------- (user_id) 是這張表的唯一主鍵。 每一行包含用…

office_word中使用宏以及DeepSeek

前言 Word中可以利用DeepSeek來生成各種宏&#xff0c;從而生成我們需要各種數據和圖表&#xff0c;這樣可以大大減少我們手工的操作。 1、Office的版本 采用的是微軟的office2016&#xff0c;如下圖&#xff1a; 2、新建一個Word文檔 3、開啟開發工具 這樣菜單中的“開發工具…