map容器的基本概念及常用成员函数

news2024/11/23 21:02:26

map(字典)的基本概念

map是一个将一个值映射到另一个值的一种数据结构。(即两个值之间有一一对应关系)。

map的所有元素都是pair类型,pair中的第一个元素称为键值(key)第二个元素称为实值(value)。key和value具有一一对应关系。在map插入元素时,所有元素都会按照key的大小进行排序。

本质

map本质上是一个关联式容器,其底层的内部实现为二叉树

优点

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

map与multimap的区别:

map不允许有重复的键值,但允许有重复的实值

multimap允许有重复的键值

map的构造与赋值操作

T1,T2中填内置数据类型或自定义数据类型

eg:

#include<iostream>
using namespace std;
#include<map>
#include<string>
void printMap(const map<string,int>&m)
{
	for (map<string, int>::const_iterator it = m.begin(); it != m.end(); it++)
	{
		cout << it->first << "\t" << it->second << endl;
	}
}
int main()
{
	map<string, int>m;//默认构造
	m.insert(pair<string, int>("张三", 18));//pair<string, int>相当于创建一个匿名对象,将匿名对象的值插入到m中
	m.insert({ "李四",20 });//相当于直接指定插入一个数据
	printMap(m);
	map<string, int>m1(m);//拷贝构造
	printMap(m1);
	map<string, int>m2 = m1;//赋值操作
	printMap(m2);
	return 0;
}

 map容器的大小和交换操作

与前面所学的容器操作类似,熟练掌握即可

map的插入和删除操作

eg:

#include<iostream>
using namespace std;
#include<map>
#include<string>
void printMap(const map<string,int>&m)
{
	for (map<string, int>::const_iterator it = m.begin(); it != m.end(); it++)
	{
		cout << it->first << "\t" << it->second << endl;
	}
}
int main()
{
	map<string, int>m;//默认构造
	m.insert(pair<string, int>("张三", 18));//pair<string, int>相当于创建一个匿名对象,将匿名对象的值插入到m中
	m.insert({ "李四",20 });//相当于直接指定插入一个数据
	m.insert(make_pair("王五", 30));//用make_pair方式插入一个键值对
	m["赵六"];//map支持用[]运算符插入数据。但使用时需注意:若map中有对应键值,则返回实值。若没有,则map会创建相应键值,并将值
	//实值赋为0
	printMap(m);
	m.erase(m.begin());//删除第一个元素
	m.erase("赵六");//删除赵六
	printMap(m);
	//m.erase(m.begin(), m.end());相当于m.clear()
	m.clear();
	return 0;
}

map查找和统计操作

eg:

#include<iostream>
using namespace std;
#include<map>
#include<string>
void printMap(const map<string,int>&m)
{
	for (map<string, int>::const_iterator it = m.begin(); it != m.end(); it++)
	{
		cout << it->first << "\t" << it->second << endl;
	}
}
int main()
{
	map<string, int>m;//默认构造
	m.insert(pair<string, int>("张三", 18));//pair<string, int>相当于创建一个匿名对象,将匿名对象的值插入到m中
	m.insert({ "李四",20 });//相当于直接指定插入一个数据
	m.insert(make_pair("王五", 30));//用make_pair方式插入一个键值对
	m["赵六"];//map支持用[]运算符插入数据。但使用时需注意:若map中有对应键值,则返回实值。若没有,则map会创建相应键值,并将值
	//实值赋为0
	printMap(m);
	//map<string,int>::iterator ret=m.find("张三");//用迭代器接收查找到的键的位置,若找不到,则迭代器最终值为m.end
	//if (ret == m.end())
	//{
	//	cout << "未找到该元素" << endl;
	//}
	//else
	//{
	//	cout << "找到该元素,该元素的实值为:" << ret->second << endl;
	//}
	//同样可以用count来判断容器中是否有该元素
	if (m.count("张三") == 0)
	{
		cout << "未找到该元素" << endl;
	}
	else
	{
		cout << "找到该元素,该元素的实值为:" << m["张三"] << endl;
	}
	return 0;
}

map容器的排序操作

map默认的排序规则是从小到大排,而我们可以利用仿函数来更改map的排序规则

使用仿函数改变排序规则需注意两点:

1、创建的类成员排序函数的权限必须为public

2、在重载()的函数中,需要在参数列表后加const,否则会报错

eg:

#include<iostream>
using namespace std;
#include<map>
#include<string>
class myCompare
{
public://注意1
	bool operator()(int v1,int v2)const//注意2
	{
		return v1 > v2;//采用降序规则
	}
};
int main()
{
	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(5, 50));
	m.insert(make_pair(4, 40));
	for (map<int, int, myCompare>::const_iterator it = m.begin(); it != m.end(); it++)
	{
		cout << it->first << "\t" << it->second << endl;
	}
	return 0;
}

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

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

相关文章

Vue工程引入Element-ui

npm 安装ELement-ui npm i element-ui -S 于package.json中发现有“element-ui”版本号即可 引入 Element 在 main.js 中写入以下内容&#xff1a; import element-ui/lib/theme-chalk/index.css; import ElementUI from element-ui;Vue.use(ElementUI);之后根据自己的需求设计…

【Apache POI库读取Excel文件,并使用HashMap来存储和检查重复项】

目录 下面是一个示例代码,使用Apache POI库读取Excel文件,并使用HashMap来存储和检查重复项。 import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream; import java.io.IOException; import java.util.…

Web html

目录 1 前言2 HTML2.1 元素(Element)2.1.1 块级元素和内联(行级)元素2.1.2 空元素 2.2 html页面的文档结构2.3 常见标签使用2.3.1 注释2.3.2 标题2.3.3 段落2.3.4 列表2.3.5 超链接2.3.6 图片2.3.7 内联(行级)标签2.3.8 换行 2.4 属性2.4.1 布尔属性 2.5 实体引用2.6 空格2.7 D…

python_ACM模式《剑指offer刷题》二叉树1

题目&#xff1a; 面试tips&#xff1a; 1. 询问是否可以使用双端队列 (看后面思路就可知为什么要问这个) 思路&#xff1a; 时复和空复都为O(n) 思路一&#xff1a;利用双端队列。总体思想是利用二叉树层序遍历(二叉树的层序遍历就是用队列dq&#xff0c;且从左往右每一层…

java高级开发 章节练习题(选择、填空、判断)

第九章 常用实用类 一. 单选题 1. (单选题)String类的equals方法&#xff0c;其作用是&#xff1a; A. 比较2个字符串对象是否为同一个对象B. 比较2个字符串对象的字符长度是否相同C. 比较2个字符串对象的首地址是否相同D. 比较2个字符串对象的字符序列是否相同 答案: D:比…

HBase 数据导入导出

HBase 数据导入导出 1. 使用 Docker 部署 HBase2. HBase 命令查找3. 命令行操作 HBase3.1 HBase shell 命令3.2 查看命名空间3.3 查看命名空间下的表3.4 新建命名空间3.5 查看具体表结构3.6 创建表 4. HBase 数据导出、导入4.1 导出 HBase 中的某个表数据4.2 导入 HBase 中的某…

2V2无人机红蓝对抗仿真

两架红方和蓝方无人机分别从不同位置起飞&#xff0c;蓝方无人机跟踪及击毁红方无人机 2020a可正常运行 2V2无人机红蓝对抗仿真资源-CSDN文库

css1字体属性

一.font-family(字体系列&#xff09; 不同字体系统用&#xff0c;隔开&#xff1b; 多个字母的字体系统用“”&#xff1b; 二.font-size&#xff08;字体大小&#xff09;&#xff08;有单位px&#xff09;&#xff08;默认字体16px&#xff09; 三.font-weight&#xff08…

大数据信用报告在线查询平台哪个好?

随着大数据技术在金融风控的运用&#xff0c;大数据信用越来越被人熟知&#xff0c;由于线下没有查询大数据信用的地方&#xff0c;想要查询大数据信用报告只有在线上查询&#xff0c;那大数据信用报告在线查询平台哪个好呢?本文贷你一起去了解市面上比较好的三个平台。 大数据…

Unity 渲染管线自动转换的实现 支持HDRP转URP,URP转HDRP

HDRP和URP无法平滑切换&#xff0c;因为属性、功能差异巨大。 本脚本仅对可对应的默认脚本和属性做了转换处理。细节调整还需自己搞。 自动转换可以节省手动更换shader、texture、通用属性的劳动成本。 操作步骤 使用前确保当前项目中存在HDRP和URP的包&#xff0c;没有请到p…

Vue.js 学习14 集成H265web.js播放器实现webpack自动化构建

Vue.js 学习14 集成H265web.js播放器实现webpack自动化构建 一、项目说明1. H265web.js 简介2. 准备环境 二、项目配置1. 下载 H265web.js2. 在vue项目里引入 H265web3. 设置 vue.config.js 三、代码引用1. 参照官方demo &#xff0c; 创建 executor.js2. 在 vue 页面里引用htm…

批量检测微信小程序是否封禁接口源码

<?php // 要检测的 appid 列表 $appids array(appid1, appid2, appid3); // 使用实际的 appid // 循环调用接口检测小程序状态 foreach ($appids as $appid) { $url https://yan.changxunwangluo.cn/xcx/check_mini_program.php?appid . urlencode($appid); $…

【已解决】c++ qt选中该行为什么该列部分变色

笔者开启了QTableView中交替行改变颜色&#xff0c;发现笔者自定义绘制的水平滚动条&#xff0c;在选中后不发生颜色改变&#xff0c;这让笔者很疑惑。笔者查阅资料后发现&#xff0c;自定义绘制的控件&#xff0c;要自身设置颜色。当笔者解决了这个问题时&#xff0c;顺手就将…

GPT原始论文:Improving Language Understanding by Generative Pre-Training论文翻译

1 摘要 自然语理解包括文本蕴含、问题回答、语义相似性评估和文档分类等一系列多样化的任务。尽管大量未标注的文本语料库很丰富&#xff0c;但用于学习这些特定任务的标注数据却很稀缺&#xff0c;这使得基于区分性训练的模型难以充分发挥作用。我们展示了通过在多样化的未标…

高级Java开发工程师岗位的基本职责(合集)

高级Java开发工程师岗位的基本职责1 职责&#xff1a; 1、负责区块链产品的研发&#xff0c;独立或与团队合作&#xff0c;按时保质完成软件开发项目; 2、参与产品系统设计、概要设计工作&#xff0c;核心功能的代码编写; 3、独立解决和指导其他同事处理开发中遇到的难点问题; …

GaussDB新体验,新零售选品升级注入新思路【华为云GaussDB:与数据库同行的日子】

选品思维&#xff1a;低频VS高频 一个的商超&#xff0c;假设有50个左右的品类&#xff0c;每个品类下有2到10个不等的商品。然而如此庞大的商品&#xff0c;并非所有都是高频消费品。 结合自身日常的消费习惯&#xff0c;对于高频和低频的区分并不难。一般大型家电、高端礼盒…

14.2 Java正则表达式(❤❤)

14.2 Java正则表达式 1. 正则表达式1.1 简介1.2 字符范围匹配1.3 元字符1.4 多次重复匹配1.5 定位匹配1.6 贪婪模式与非贪婪模式1.7 表达式分组1. 正则表达式 1.1 简介 开源 在线正则表达式测试 1.2 字符范

mapbox 高亮相同特征的要素数据

一、完整代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Highlight features containing similar data</title> <meta name"viewport" content"initial-scale1,maximum-scale1,user-scal…

VUE3+TS使用OpenSeadragon学习之旅,实现多图片切换效果

1.官方网站&#xff1a;OpenSeadragon 2.使用npm下载插件&#xff1a;npm install openseadragon 3.在 index.html文件引入资源 <link rel"stylesheet" href"node_modules/openseadragon/build/openseadragon/openseadragon.css" /><script src…

正点原子--STM32定时器学习笔记(1)

这部分是笔者对基本定时器的理论知识进行学习与总结&#xff01;&#xff0c;主要记录自己在学习过程中遇到的重难点&#xff0c;其他一些基础点就一笔带过了&#xff01; 1. 定时器概述 1.1 软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xf…