map容器(20221125)

news2025/7/19 11:12:42

一、map/multimap容器

1、map基本概念

map中所有元素都是pair;

pair第一个元素为key(键值),起到索引的作用,第二个元素为value(实值);

所有元素会根据元素的键值(key)自动排序。

map/multimap实质都属于关联式容器 底层结构为二叉树

优点:

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

map/multimap区别:

map中不允许有重复的key值,multimap中可以有。

2、构造和赋值

map<T1,T2>mp; //默认构造

map(const map &mp); // 拷贝构造

map& operator=(const map&mp); //赋值重载=操作符

void printMap(map<string, int>&mp)

{

    for (map<string, int>::iterator it = mp.begin(); it != mp.end(); it++)

    {

        cout << "key = " << (*it).first << " value=" << (*it).second << endl;

    }

}



void test01()

{

    map<string,int>mp;

    mp.insert(pair<string, int>("张三", 19)); //插入时必须要先创建一个对组

    mp.insert(pair<string, int>("张四", 20)); //插入时必须要先创建一个对组

    mp.insert(pair<string, int>("张五", 21)); //插入时必须要先创建一个对组

    mp.insert(pair<string, int>("张六", 10)); //插入时必须要先创建一个对组

    printMap(mp);

    //拷贝构造

    map<string, int>mp1(mp);

    cout << "mp1:" << endl;

    printMap(mp1);



    //赋值

    map<string,int>mp2;

    mp2 = mp1;

    cout << "mp2:" << endl;

    printMap(mp2);

}

2、map的大小和交换

函数原型:

size();

empty();

swap(st);

用法与其它容器相同

3、map插入和删除

函数原型:

insert(elem);

clear();

erase(pos);

erase(beg,end);

erase(key); //删除容器中值为key的元素

用法与其他容器相同

void test02()

{

    map<string, int>mp2;

    mp2.insert(pair<string, int>("B", 19)); //插入时必须要先创建一个对组

    mp2.insert(pair<string, int>("C", 20)); //插入时必须要先创建一个对组

    mp2.insert(pair<string, int>("A", 21)); //插入时必须要先创建一个对组

    mp2.insert(pair<string, int>("D", 10)); //插入时必须要先创建一个对组

    mp2.insert(make_pair("E", 23));

    //第三种插入

    mp2.insert(map<string, int>::value_type("M", 20));

    //第四种插入

    mp2["F"] = 30;//不建议 ,可以用这个方式访问键值为key的实值value

    printMap(mp2);



    //删除

    cout << "删除第一个元素" << endl;

    mp2.erase(mp2.begin());

    printMap(mp2);

    cout << "删除key为M的元素" << endl;

    mp2.erase("M"); //按key的方式删除

    printMap(mp2);

    cout << "清空元素" << endl;

    mp2.clear();

    printMap(mp2);

}

5、map的查找与统计

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

count(key);//统计key的元素个数

用法与set的查找与统计相同。

void test03()

{

    map<string, int>mp2;

    mp2.insert(pair<string, int>("B", 19)); //插入时必须要先创建一个对组

    mp2.insert(pair<string, int>("C", 20)); //插入时必须要先创建一个对组

    mp2.insert(pair<string, int>("A", 21)); //插入时必须要先创建一个对组

    mp2.insert(pair<string, int>("D", 10)); //插入时必须要先创建一个对组

    mp2.insert(make_pair("E", 23));

    //第三种插入

    mp2.insert(map<string, int>::value_type("M", 20));

    //第四种插入

    mp2["F"] = 30;//不建议 ,可以用这个方式访问键值为key的实值value



    //查找

    map<string,int>::iterator pos = mp2.find("B");//返回的是迭代器 用迭代器接收

    if (pos != mp2.end())

    {

        cout << "元素存在,其实值为:"<< (*pos).second<< endl;

        cout << "其个数为: " << mp2.count("B") << endl;

    }

    else

    {

        cout << "元素不存在!" << endl;

    }

}

6、map容器的排序规则

class MyCompare {

public:

    bool operator()(string v1, string v2)const //重载()  需要加一个const 否则会报错

    {

        return v1 > v2;

    }

};



void test04()

{

    map<string, int>mp2;

    mp2.insert(pair<string, int>("B", 19)); //插入时必须要先创建一个对组

    mp2.insert(pair<string, int>("C", 20)); //插入时必须要先创建一个对组

    mp2.insert(pair<string, int>("A", 21)); //插入时必须要先创建一个对组

    mp2.insert(pair<string, int>("D", 10)); //插入时必须要先创建一个对组

    mp2.insert(make_pair("E", 23));

    mp2.insert(make_pair("E", 28));

    //第三种插入

    mp2.insert(map<string, int>::value_type("M", 20));

    //第四种插入

    mp2["F"] = 30;//不建议 ,可以用这个方式访问键值为key的实值value



    //查找

    map<string, int>::iterator pos = mp2.find("B");//返回的是迭代器 用迭代器接收

    if (pos != mp2.end())

    {

        cout << "元素存在,其实值为:" << (*pos).second << endl;

        cout << "其个数为: " << mp2.count("B") << endl;

    }

    else

    {

        cout << "元素不存在!" << endl;

    }

    cout << "默认排序为:" << endl;

    printMap(mp2);

    cout << "自己定义排序插入后:" << endl;



    map<string, int,MyCompare>mp3;

    mp3.insert(pair<string, int>("B", 19));

    mp3.insert(pair<string, int>("C", 20));

    mp3.insert(pair<string, int>("A", 21));

    mp3.insert(pair<string, int>("D", 10));

    mp3.insert(make_pair("E", 23));

    mp3.insert(make_pair("E", 28));

    mp3.insert(map<string, int>::value_type("M", 20));

    mp3["F"] = 30;//不建议 ,可以用这个方式访问键值为key的实值value

    for (map<string, int, MyCompare>::iterator it = mp3.begin(); it != mp3.end(); it++)

    {

        cout << "key为: " <<it->first << " value为:" << (*it).second << endl;

    }

}

也可以不用定义MyCompare类,直接用greater<string> ,其中string表示比较string的大小

    map<string, int,greater<string>>mp3;

    mp3.insert(pair<string, int>("B", 19));

    mp3.insert(pair<string, int>("C", 20));

    mp3.insert(pair<string, int>("A", 21));

    mp3.insert(pair<string, int>("D", 10));

    mp3.insert(make_pair("E", 23));

    mp3.insert(make_pair("E", 28));

    mp3.insert(map<string, int>::value_type("M", 20));

    mp3["F"] = 30;//不建议 ,可以用这个方式访问键值为key的实值value

    for (map<string, int>::iterator it = mp3.begin(); it != mp3.end(); it++)

    {

        cout << "key为: " <<it->first << " value为:" << (*it).second << endl;

}

注意map容器只能通过键值大小来进行排序,不能通过实值的大小来进行排序,若需要通过实值大小排序,可以转为其他容器来实现,如vecter, vecter<pair<int,int>>。

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

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

相关文章

论文阅读笔记 | 三维目标检测——PartA2算法

如有错误&#xff0c;恳请指出。 文章目录0. 前言与补充知识1. 背景2. 相关工作3. 网络结构3.1 Part-aware stageAnchor-free Proposal GenerationAnchor-based Proposal GenerationDiscussion Two Proposal Generation Strategies3.2 Part-aggregation stageROI-aware feature…

ORB-SLAM2 ---- Frame::ComputeBoW函数(TrackReferenceKeyFrame调用版)

目录 1.函数作用 2.什么是BowVec和FeatVec 3.代码 3.1 Frame::ComputeBoW解释 3.2 transform主函数&#xff1a;将一幅图像所有的特征点转化为BowVector和FeatureVector 3.3 transform&#xff1a;将描述子转化为Word id&#xff0c; Word weight&#xff0c;节点所属的…

[毕业设计]机器学习水域检测标注算法

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投…

uniapp里接入lottie-miniprogram详细指南

包工头&#xff1a;小张啊&#xff0c;我们页面里那几个gif也太low了&#xff0c;你能不能追求远大点。ui妹子&#xff1a;软件推荐可以用lottie实现。我&#xff1a;这玩意我耍过&#xff0c;交给我了。 牛逼已经吹出去了&#xff0c;开干&#xff0c; 遇到问题有&#xff0…

基于MxNet实现目标检测-YoloV3【附部分源码及模型】

文章目录前言目标检测发展史及意义一、数据集的准备1.标注工具的安装2.数据集的准备3.标注数据4.解释xml文件的内容二、网络结构的介绍三、代码实现0.工程目录结构如下1.导入库2.配置GPU/CPU环境3.数据加载器4.模型构建YoloV3-tinyYoloV35.模型训练1.学习率设置2.优化器设置3.损…

XSS绕过安全狗WAF

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是XSS绕过安全狗WAF。 一、测试环境搭建 我们使用Vmware虚拟机搭建靶场环境。在Vmware虚拟机上&#xff0c;安装有PHPStudy&#xff0c;如下所示&#xff1a; 然后安装安全狗WAF&#xff0c;安全狗WAF有一系列的…

深度学习入门(五十二)计算机视觉——风格迁移

深度学习入门&#xff08;五十二&#xff09;计算机视觉——风格迁移前言计算机视觉——风格迁移课件样式迁移易于CNN的样式迁移教材1 方法2 阅读内容和风格图像3 预处理和后处理4 抽取图像特征5 定义损失函数5.1 内容损失5.2 风格损失5.3 全变分损失5.4 损失函数6 初始化合成图…

【瑞萨RA4M2】开发环境搭建和点灯指南

【瑞萨RA4系列开发板体验】开发环境搭建和新手点灯指南 文章目录【瑞萨RA4系列开发板体验】开发环境搭建和新手点灯指南一、简单开箱二、芯片简介三、开发环境搭建2.1 安装FSP(RASC)2.2 安装Keil MDK2.3 安装RA4M2 Keil Pack2.4 安装RFP(瑞萨烧录工具)三、新手点灯指南3.1 创建…

hoops编程指南:04.4用户交互突出显示

user interaction highlighting 1.突出显示 在执行选择之后&#xff0c;通常需要向用户提供关于所选内容的视觉反馈。例如&#xff0c;场景可能包含由多个几何体表示的飞机机翼的图片。然而&#xff0c;HOOPS Visualize对飞机机翼这一独特概念一无所知。因此&#xff0c;如果…

ES6 入门教程 28 异步遍历器 28.1 同步遍历器的问题 28.2 异步遍历的接口 28.3 for await...of

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程28 异步遍历器28.1 同步遍历器的问题28.2 异步遍历的接口28.3 for await...of28 异步遍历器 28.1 同步遍历器的问题 Itera…

【教学类-16-02】20221125《世界杯七巧板A4整页-随机参考图七巧板 3份一页》(大班)

效果展示&#xff1a; 单页效果 多页效果 预设样式&#xff1a; 背景需求&#xff1a; 2022年11月24日&#xff0c;大1班随机抽取的9位幼儿制作了9张拼图&#xff0c;发现以下三个问题&#xff1a; 1、粉红色辅助纸选择量多——9份作业有4位幼儿的七巧板人物是粉红色的 2、…

【计算机网络】以太网供电PoE - Power over Ethernet

.5BG? ?: J^ ~P YG: ~5PY^ 5&Y^ .#&J. 7&G7^. ~##?. :Y##PY?!~^:... .5#Y^ .7P&&&##BBBBB#B^ …

神经网络和深度学习-均方误差Mean Square Error

均方误差Mean Square Error 测量预测值Ŷ与某些真实值匹配程度。MSE 通常用作回归问题的损失函数。 由单个样本训练损失来推导出整个训练集的MSE MSE1n∑i1n(Yi−Y^i)2\mathrm{MSE}\frac{1}{n} \sum_{i1}^{n}\left(Y_{i}-\hat{Y}_{i}\right)^{2} MSEn1​i1∑n​(Yi​−Y^i​)…

02. Docker安装记录卸载

notice: 本文所有内容参考文档&#xff0c;具体没有任何价值 Linux&#xff08;CentOS 7 &#xff09; 1. 安装 查看系统信息&#xff1a; # 系统版本是3.0以上的&#xff1b; [rootVM-8-4-centos /]# uname -r 3.10.0-1160.76.1.el7.x86_64 [rootVM-8-4-centos /]# cat /et…

nrComm Lib组件以及串行通信任务的类

nrComm Lib组件以及串行通信任务的类 nrCommLib被描述为VCL例程的一组Delphi组件以及串行通信任务的类。该库能够帮助用户和开发人员访问不同的设备&#xff0c;包括数据和语音调制解调器、条形码扫描仪、蓝牙、人机接口设备、串行端口、USB、GSM、GPS、LPT SS等。它能够为几乎…

LabVIEW为可执行文件构建安装程序时找不到运行引擎

LabVIEW为可执行文件构建安装程序时找不到运行引擎 在为可执行文件构建安装程序时包含一个特定的运行时引擎安装程序&#xff0c;但找不到它。已经检查了运行时引擎是否使用NI-MAX安装。 “运行时引擎”字段下列出的项目未在“选择源”对话框中显示任何项目。 解决方案 有时运…

看透react源码之感受react的进化

写在前面 网上有许多关于react源码解读的文章&#xff0c;其中有很多都只是单纯贴源码&#xff0c;罗列变量名。其实大家都知道这个英文怎么读&#xff0c;直译也大概知道意思&#xff0c;但是这个英文在react中起到什么作用&#xff0c;并没有说的很通俗明白。 对于刚刚接触…

推荐系统常见算法分类

文章目录1.基本分类2.基于算法思想的分类3.基于应用问题的分类该系列历史文章&#xff1a; 1.推荐系统最通俗介绍 资料整理&#xff0c;来源于北大刘宏志教授讲座内容。 1.基本分类 常见的推荐系统算法分类如下&#xff1a; 算法思想 基于人口统计学、基于内容、协同过滤、基…

Django练习

目录 基础命令 一、新建项目 二、配置 三、运行 Bootstrap下载 jQuery下载 基础命令 #创建项目 django-admin startproject [项目名称] #创建app应用 python manage.py startapp [app名称] #运行 python manage.py runserver [端口号] #创建数据模型和数据表结构 python…

HTML PDF 查看器--RAD PDF 3.33 FOR ASP.NET

RAD PDF 的主要特点 基于 HTML 的 PDF 阅读器 客户端 PDF 编辑器 功能丰富的 PDF 表单填写器 交互式 PDF 表单设计器 保护 PDF 内容 签署和认证 PDF 文件 广泛的兼容性 & 在您的服务器上 将 PDF 集成到您的工作流程中 使用 ASP.NET 或 ASP.NET Core / 5 / 6 破解版RAD PDF…