STL常用容器-map

STL常用容器-map

    • map/multimap容器
      • 1.1 map基本概念
      • 1.2 map构造和赋值
      • 1.3 map大小和交换
      • 1.4 map插入和删除
      • 1.5 map查找和统计
      • 1.6 map容器排序

map/multimap容器

1.1 map基本概念

简介:

  • map中所有元素都是pair
  • pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
  • 所有元素都会根据元素的键值自动排序

本质:

  • map/multimap属于关联式容器,底层结构是用二叉树实现

优点:

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

map和multimap区别:

  • map不允许容器中有重复key值元素
  • multimap允许容器中有重复key值元素

1.2 map构造和赋值

功能描述:

  • 对map容器进行构造和赋值操作

构造:

map<T1, T2> mp;      //map默认构造函数
map(const map &mp);  //拷贝构造函数

赋值:

map& operator=(const map &mp);  //重载等号操作符

案例:

#include<iostream>
#include<map>
#include<string>
using namespace std;//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>(3, 30));m.insert(pair<int, int>(2, 20));m.insert(pair<int, int>(4, 40));printMap(m);  //按键值自动排序,(1,10)(2,20)(3,30).. //拷贝构造map<int, int>m2(m);printMap(m2);//赋值map<int, int>m3;m3 = m2;printMap(m3);
} int main(){test01();system("pause");return 0;
}

1.3 map大小和交换

功能描述:

  • 统计map容器大小以及交换map容器

函数原型:

size();    //返回容器中元素的数目
empty();   //判断容器是否为空
swap(st);  //交换两个集合容器

案例:

#include<iostream>
#include<map>
#include<string>
using namespace std;//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>(3, 30));m.insert(pair<int, int>(2, 20));if(m.empty()){cout << "m为空" << endl;}else{cout << "m不为空" << endl;cout << "m的大小为:" << m.size() << endl; }
} //交换
void test02(){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));map<int, int> m2; m2.insert(pair<int, int>(4, 100));m2.insert(pair<int, int>(5, 200));m2.insert(pair<int, int>(6, 300));//交换前cout << "交换前:" << endl; printMap(m);printMap(m2);//交换后m.swap(m2);cout << "交换后:" << endl;printMap(m);printMap(m2); 
} int main(){//test01();test02();system("pause");return 0;
}

1.4 map插入和删除

功能描述:

  • map容器进行插入数据和删除数据

函数原型:

insert(elem);    //在容器中插入元素
clear();         //清除所有元素
erase(pos);      //删除pos迭代器所指的元素,返回下一个元素的迭代器
erase(beg, end); //删除区间[beg,end)的所有元素,返回下一个元素的迭代器
erase(key);      //删除容器中值为key的元素

案例:

#include<iostream>
#include<map>
using namespace std;//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 << m[5] << endl;  //会自动创建key的同时value为0 printMap(m);//删除m.erase(m.begin()); printMap(m);m.erase(3);    //按照key删除 printMap(m);//清空 //m.erase(m.begin(), m.end());m.clear();printMap(m);
} int main(){test01();system("pause");return 0;
}

1.5 map查找和统计

功能描述:

  • 对map容器进行查找数据以及统计数据

函数原型:

find(key);  //查找key是否存在。若存在,返回该键的元素的迭代器;若不存在,返回set.end()
count(key); //统计key的元素个数

案例:

#include<iostream>
#include<map>
using namespace std;//map容器 查找和统计 
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));map<int, int>::iterator pos = m.find(3); if(pos != m.end()){cout << "查到了元素。key=" << (*pos).first << ",value=" << pos->second << endl;}else{cout << "未找到元素" << endl;}//统计//map不允许插入重复的key,count统计结果为0/1//multimap统计结果可能大于1 int num = m.count(3); cout << "num=" << num << endl;
} int main(){test01();system("pause");return 0;
}

1.6 map容器排序

学习目标:

  • map容器默认排序规则为 按照key值进行 从小到大排序,掌握如何该百年排序规则

主要技术点:

  • 利用仿函数,可以改变排序规则

案例:

#include<iostream>
#include<map>
using namespace std;class MyCompare
{
public:bool operator()(int v1, int v2){//降序return v1 > v2; }
};//map容器 排序 
void test01(){//查找 map<int, int, MyCompare> 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));m.insert(pair<int, int>(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;
}

对于自定义数据类型,map必须指定排序规则,同set容器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/12044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 容器访问宿主机服务

docker 网络简介 docker 在安装时会默认创建三个网络&#xff1a;bridge&#xff08;默认网络模式&#xff09;、 none 、host。 host 直接和宿主机共用网络。bridge 网络隔离&#xff0c;通过虚拟网桥&#xff08;一般是 docker0&#xff09;与宿主机通信。none 禁用网络功能…

Jenkins插件管理切换国内源地址

一、替换国内插件下载地址 选择系统管理–>插件管理–> Available Plugins 并等待页面完全加载完成、这样做是为了把jenkins官方的插件列表下载到本地、接着修改地址文件、替换为国内插件地址 进入插件文件目录 cd /var/lib/jenkins/updatesdefault.json 为插件源地址…

tinymce实现将word中内容(文字图片等)直接粘贴至编辑器中——利用插件tinymce-powerpaste-plugin

TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。同类程序有&#xff1a;UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。 TinyMCE的优势&#xff1a; 开源可商用&#xff0c;基于LGPL2.1 插件丰富&#xff0c;自带插件基本涵盖日常…

技术笔记2023076 rBoot学习7

技术笔记2023076 rBoot学习7 继续之前的学习。 代码分析&#xff1a;函数find_image() // prevent this function being placed inline with main // to keep mains stack size as small as possible // dont mark as static or itll be optimised out when // using the ass…

给APK签名—两种方式(flutter android 安装包)

前提&#xff1a;给未签名的apk签名&#xff0c;可以先检查下apk有没有签名 通过命令行查看&#xff1a;打开终端或命令行界面&#xff0c;导入包含APK文件的目录&#xff0c;并执行以下命令&#xff1a; keytool -printcert -jarfile your_app.apk 将 your_app.apk替换为要检查…

String 的 switch-case 实现原理

前面我们已经知道 String 的 switch-case 实现原理 依据 case 值的稀疏程度&#xff0c;分别由两个指令 - tableswitch 和 lookupswitch 实现&#xff0c;但是这两个指令都支持整型&#xff0c; 如何让 String 类型的值 也支持 String 的 switch-case 实现原理 public class T…

【数据结构】--189.轮转数组

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

Rethinking the Image Fusion(PMGI)

1.摘要 本文提出了一种基于梯度和强度比例维护&#xff08;PMGI&#xff09;的快速统一图像融合网络&#xff0c;可以端到端实现各种图像融合任务&#xff0c;包括红外和可见图像融合、多曝光图像融合、医学图像融合、多焦点图像融合和全色增强。我们将图像融合问题统一为源图…

保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识

1.简介 有的小伙伴或者童鞋们可能会好奇地问&#xff0c;不是讲解和分享抓包工具了怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解&#xff0c;你就能越掌握Fiddler的使用方法&#xff0c;反过来你越使用Fiddler&#xff0c;就越能帮助你了解HTTP协议。 Fid…

Java | 继承、多态、抽象类与接口

目录 一、类的继承 二、Object类 2.1 getClass()方法 2.2 toString()方法 2.3 equals()方法 三 、对象类型的转换 3.1 向上转换 3.2 向下转型 四、使用instanceof关键字判断对象类型 五、方法的重载 六、final关键字 6.1 final变量 6.2 final方法 6.3 final类 七…

安装x265

一、编译libx265源码 libx265是用CMAKE编译的&#xff0c;故先下cmake&#xff0c;我是centos系统&#xff0c;命令&#xff1a; yum install cmake -y进入目录./x265_1.9/build/linux/下&#xff0c;执行脚本&#xff1a; sh make-Makefiles.bash选择好之后&#xff0c;输入…

【多模态】19、RegionCLIP | 基于 Region 来实现视觉语言模型预训练

文章目录 一、背景二、方法2.1 Region-based Language-Image Pretraining2.2 目标检测的迁移学习 三、效果3.1 数据集3.2 实现细节3.3 结果 论文&#xff1a; RegionCLIP: Region-based Language-Image Pretraining 代码&#xff1a;https://github.com/microsoft/RegionCLIP …

了解Unity编辑器之组件篇Playables和Rendering(十)

Playables 一、Playable Director&#xff1a;是一种用于控制和管理剧情、动画和音频的工具。它作为一个中央控制器&#xff0c;可以管理播放动画剧情、视频剧情和音频剧情&#xff0c;以及它们之间的时间、顺序和交互。 Playable Director组件具有以下作用&#xff1a; 剧情控…

Vue中使用echarts

1 安装 npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm install echarts -S 2 main.js引入 3 引入成功

perl 拼接字符串

在Perl中&#xff0c;你可以使用不同的方法来拼接字符串。以下是一些常用的方法&#xff1a; 使用.运算符拼接字符串&#xff1a; my $str1 "Hello, "; my $str2 "World!"; my $result $str1 . $str2; print $result; # 输出&#xff1a;Hello, Worl…

探索Java API学习路线:从基础到高级的全面指南

文章目录 第一阶段&#xff1a;入门基础1. 环境准备2. 学习Java基础 第二阶段&#xff1a;熟悉常用的Java API1. Java标准库2. Java API文档 第三阶段&#xff1a;深入学习特定领域的Java API1. Java GUI API2. Java数据库连接&#xff08;JDBC&#xff09;API3. Java多线程API…

【蓝图】p44简单解密机关

p44简单解密机关 p44简单解密机关文字提示开门文字提示开灯For Each Loop和For Each Loop With Break区别For Each LoopFor Each Loop With Break小操作&#xff1a;改变走线Execute Console Command(执行控制台命令) p44简单解密机关 文字提示开门 创建Actor蓝图类&#xff…

Python及PyCharm安装教程

1.Python安装教程 python官网下载windows64位python installer&#xff1b; 这里选择windows installer(64-bit) 打开下载完成的installer文件 记得勾选上Add python.exe to PATH&#xff0c;再点击Install Now&#xff1b; &#xff08;如果想要更改安装位置&#xff0c;需要…

【使用时空RBF-NN进行非线性系统识别】实现了 RBF、分数 RBF 和时空 RBF 神经网络,用于非线性系统识别研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 2.1 算例1 2.2 算例2 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 本文用于非线性系统识别任务的径向基函数神经网络&#xff08;RBF-NN&#xff09;的三种变体。特别是&#xff0c;我实现…

MYSQL DCL语句

MySQL DCL语句 简介 DQL是用于查询和检索数据库数据的重要工具。它具有丰富的功能和灵活性&#xff0c;可以根据不同的查询需求进行条件过滤、排序、聚合计算等操作。通过合理使用DQL&#xff0c;可以从数据库中提取有用的数据以进行数据分析和决策支持。 DCL语句的分类 DC…