map 、multimap

news2024/9/23 23:23:09

目录

1.基本概念,键值对

 2.map的构造和赋值

 3.map的大小和交换,size,empty,swap 

4.map的插入和删除,insert(make_pair),clear,erase,[]利用key访问vale

5.map的查找和统计,find,count

6.map容器的排序,自定义排序,仿函数 

 6.1存放内置的数据类型

6.2存放自定义的数据类型

1.基本概念,键值对

 2.map的构造和赋值

#include<iostream>
using namespace std;
#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()
{
	//需要包含#include<map>
	//创建map容器
	map<int, int>m;//<int,int>第一个是key的数据类型,第二个是value的数据类型
	m.insert(pair<int, int>(1, 10));//pair<int, int>(1, 10)匿名对组
	m.insert(pair<int, int>(3, 20));
	m.insert(pair<int, int>(4, 30));
	m.insert(pair<int, int>(2, 40));
	printMap(m);

	//拷贝构造
	map<int, int>m2(m);
	printMap(m2);

	//赋值
	map<int, int>m3;
	m3 = m;
	printMap(m3);

	//创建multimap容器
	multimap<int, int>mp;
	mp.insert(pair<int, int>(1, 20));
	mp.insert(pair<int, int>(3, 20));
	mp.insert(pair<int, int>(1, 10));
	mp.insert(pair<int, int>(4, 30));
	mp.insert(pair<int, int>(2, 40));
	for (multimap<int, int>::iterator it = mp.begin(); it != mp.end(); it++)
	{
		cout << "key = " << (*it).first << " value = " << it->second << endl;
	}
	cout << endl;
}
int main()
{
	
	test01();
	system("pause");//按任意键继续
	return 0;
}

 3.map的大小和交换,size,empty,swap 

#include<iostream>
using namespace std;
#include<map>
//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));
	if (m.empty())//为空返回真
	{
		cout << "m为空" << endl;
	}
	else
	{
		cout << "m不为空" << endl;
		cout << "m中元素的个数为:" << m.size() << endl;
	}
}
//交换
void printMap(map<int, int>&m)
{
	for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
	{
		cout << (*it).first << " " << it->second << endl;
	}
	cout << endl;
}
void test02()
{
	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>m2;
	m2.insert(pair<int, int>(4, 40));
	m2.insert(pair<int, int>(5, 50));
	m2.insert(pair<int, int>(6, 60));
	cout << "交换前:" << endl;
	printMap(m);
	printMap(m2);
	cout << "交换后:" << endl;
	m.swap(m2);
	printMap(m);
	printMap(m2);

}
int main()
{
	
	test01();
	test02();
	system("pause");//按任意键继续
	return 0;
}

4.map的插入和删除,insert(make_pair),clear,erase,[]利用key访问vale

#include<iostream>
using namespace std;
#include<map>
//map容器的插入删除
void printMap(map<int, int>&m)
{
	for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
	{
		cout << (*it).first << " " << 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]不存在会创建,存在会覆盖原值,
	//另外一个,没有key为5的pair,输出m[5]时,value的值会赋0
	m[4] = 40;
	m.insert({ 55,50 });
	printMap(m);
	//[]通过key访问value
	cout << m[4] << endl;

	//删除
	map<int, int>::iterator it = m.begin();
	m.erase(++it); //it + 1报错,不可以随机删除,前移后移可以
	printMap(m);

	//key删除
	m.erase(55);//按照key删除 ,key存在就删除,不存在就不删除
	m.erase(10);
	printMap(m);

	//区间删除
	m.erase(m.begin(), ++m.begin());
	printMap(m);
	//清空
	m.clear();
}
int main()
{
	
	test01();
	system("pause");//按任意键继续
	return 0;
}

5.map的查找和统计,find,count

#include<iostream>
using namespace std;
#include<map>
//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));
	m.insert(pair<int, int>(3, 40));//map不允许有重复的key,所以这一个数据插不进去
	map<int, int>::iterator pos=m.find(3);//不管查没查到都会返回一个迭代器
	if (pos != m.end())
	{
		cout << "查到了元素 key = " << pos->first<<" value = " << (*pos).second << endl;
	}
	else
	{
		//找不到返回m.end()
		cout << "未找到元素" << endl;
	}
	//统计
	//map不允许有重复的key,count统计而言,要么是1要么是0
	//multimap的count统计可能大于1
	int num = m.count(3);
	cout << "num = " << num << endl;
}
int main()
{
	
	test01();
	system("pause");//按任意键继续
	return 0;
}

6.map容器的排序,自定义排序,仿函数 

 6.1存放内置的数据类型

#include<iostream>
using namespace std;
#include<map>
//map容器的排序
class MyCompare
{
public:
	bool operator()(int a,int b)const//map<int, int,MyCompare>的key为int
	{
		return a > b;//降序
	}
};

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;
	}
}

int main()
{
	
	test01();
	system("pause");//按任意键继续
	return 0;
}

6.2存放自定义的数据类型

#include<iostream>
using namespace std;
#include<map>
//map容器的排序
class Person
{
public:
	Person(string name, int age)
	{
		m_Name = name;
		m_Age = age;
	}
	string m_Name;
	int m_Age;
};
class MyCompare
{
public:
	bool operator()(const Person &p1, const Person &p2)const//map<int, int,MyCompare>的key为Person
	{
		return p1.m_Name > p2.m_Name;//降序
	}
};
void test01()
{
	map<Person, int, MyCompare>m;
	Person p1("A", 10);
	Person p2("B", 20);
	Person p3("C", 30);
	Person p4("D", 40);
	m.insert(pair<Person, int>(p1, 150));
	m.insert(pair<Person, int>(p2, 160));
	m.insert(pair<Person, int>(p3, 170));
	m.insert(pair<Person, int>(p4, 180));
	for (map<Person, int, MyCompare>::iterator it = m.begin(); it != m.end(); it++)
	{
		cout << "key的name = " << it->first.m_Name << " key的年龄 = " << it->first.m_Age << " value = " << (*it).second << endl;
	}
}

int main()
{

	test01();
	system("pause");//按任意键继续
	return 0;
}

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

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

相关文章

5MW风电永磁直驱发电机-1200V直流并网MATLAB仿真模型

MATLAB2016b运行。主体模型&#xff1a;风机传动模块、PMSG模块、蓄电池模块、超级电容模块、无穷大电源。蓄电池控制、风机控制、逆变器控制。风机输出功率&#xff1a;直流母线电压&#xff1a;逆变器输出电压&#xff1a;逆变器输出电流&#xff1a;混合储能荷电状态&#x…

2023年金三银四跳槽季,阿里巴巴 Java10W 字面经,首次公布

Java 面试 “金三银四”这个字眼对于程序员应该是再熟悉不过的了&#xff0c;每年的金三银四都会有很多程序员找工作、跳槽等一系列的安排。说实话&#xff0c;面试中 7 分靠能力&#xff0c;3 分靠技能&#xff1b;在刚开始的时候介绍项目都是技能中的重中之重&#xff0c;它…

超图iServer扩展开发记录Restlet 1

在“REST 服务发布机制简述”中&#xff0c;讲述了 REST 服务发布的过程&#xff0c;资源的信息保存在资源配置文件里&#xff0c;并通过 REST 应用上下文传递给 REST 应用对象&#xff0c;从而在 HTTP 请求到达 REST 应用对象的时候&#xff0c;能够找到合适的资源实现来处理。…

Jwt简介

目录前言What is JSON Web Token?When should you use JSON Web Tokens?What is the JSON Web Token structure?HeaderPayloadSignaturePutting all togetherHow do JSON Web Tokens work?Why should we use JSON Web Tokens?前言 技术文档这种东西&#xff0c;我一直认为…

数枝营销与纷享销客达成战略合作,共同推动B2B企业营与销一体化

近日&#xff0c;营销咨询与数字化服务商数枝营销同国内知名SaaS CRM厂商纷享销客举行了战略合作签约仪式&#xff0c;双方就促进B2B企业的“营与销协同增长”将展开全面合作。纷享销客创始人兼CEO罗旭与数枝营销创始人黄海钧 另据工商信息显示&#xff0c;数枝营销&#xff08…

webshell管理工具-菜刀的管理操作

什么是webshell Webshell是一种运行在Web服务器上的脚本程序&#xff0c;通常由黑客使用来绕过服务器安全措施和获取对受攻击服务器的控制权。Webshell通常是通过利用Web应用程序中的漏洞或者弱密码等安全问题而被植入到服务器上的。 一旦Webshell被植入到服务器上&#xff0…

基于应用理解的协议栈优化

作者&#xff1a;余兵 移动互联网时代&#xff0c;不同的应用追求的产品体验差异性很大。 应用商店和图片等下载类型业务追求速度、越快越好&#xff0c;短视频关注起播、拖拽响应速度和观看过程卡不卡&#xff0c;直播追求画质清晰、高码率和直播过程流畅&#xff1b;而游戏则…

苹果iPhone屏下Touch ID技术专利获批,苹果Find My技术大火

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的最新清单&#xff0c;苹果近日获得了屏下 Touch ID 的新技术专利。专利中重点提及了“短波红外线”技术&#xff0c;相关元件位于屏幕下方或者集成到屏幕内。 该专利主要介绍了应用于屏幕 Touch ID 的光学成像系统&…

自动化工具selenium(一)

一)什么是自动化&#xff1f;为什么要做自动化&#xff1f; 自动化测试可以代替一部分手工测试&#xff0c;不能够完全代替手工测试 1)自动化测试相比于手工测试来说人力的投入和时间的投入是非常非常少的&#xff0c;自动化测试能够提高测试效率 2)在回归测试里面&#xff0c;…

被隐藏的过程——预处理

文章目录0. 前言1. 程序的翻译环境和执行环境2. 被隐藏的过程2.1 翻译环境2.2 编译3.2.1 预编译3.2.2 编译2.2.3 汇编2.3 链接2.4 运行环境3. 预处理3.1 预定义符号3.2 #define3.2.1 #define定义标识符3.2.2 #define定义宏3.2.3 #define替换规则3.2.4 #和##3.2.5 带副作用的宏参…

API Gateway vs Load Balancer:选择适合你的网络流量管理组件

本文从对比了 API Gateway 和 Load Balancer 的功能区别&#xff0c;帮助读者更好地了解他们在系统架构中扮演的角色。 作者陈泵&#xff0c;API7.ai 技术工程师。 原文链接 由于互联网技术的发展&#xff0c;网络数据的请求数节节攀升&#xff0c;这使得服务器承受的压力越来…

vue-virtual-scroll-list虚拟列表

当DOM中渲染的列表数据过多时&#xff0c;页面会非常卡顿&#xff0c;非常占用浏览器内存。可以使用虚拟列表来解决这个问题&#xff0c;即使有成百上千条数据&#xff0c;页面DOM元素始终控制在指定数量。 一、参考文档 https://www.npmjs.com/package/vue-virtual-scroll-li…

Web前端学习:章三 -- JavaScript预热(三)

六九&#xff1a;函数的变量提升 函数的变量提升没有var高&#xff0c;var是最高的。 先提var&#xff0c;再提函数 解析&#xff1a; 1、4行打印之前没有定义变量&#xff0c;预解析触发变量提升 2、先提var&#xff0c;再提函数。所以先把var提升到最上面&#xff0c;然后提…

【蓝牙系列】蓝牙5.4到底更新了什么(2)

【蓝牙系列】蓝牙5.4到底更新了什么&#xff08;2&#xff09; 一、 背景 上一篇文章讲了蓝牙5.4的PAwR特征&#xff0c;非常适合应用在电子货架标签&#xff08;ESL&#xff09;领域&#xff0c; 但是实际应用场景中看&#xff0c;只有PAwR特性是不够的&#xff0c;如何保证广…

【latex】总结最近使用到的画图、表格及公式操作

前言 推荐使用overleaf写latex文章&#xff0c;内含很多会议/期刊的模板&#xff0c;可以直接套用。 https://www.overleaf.com下文都是在写论文过程中比较头疼的部分&#xff0c;有人建议我写完文章&#xff0c;最后再调整格式。但图片过大看起来实在是不适~ 插入图片 \beg…

5GHz 你得先认识DFS

想用Wi-Fi 5GHz&#xff1f;你得先认识DFS&#xff01; 添加链接描述 无线网络2.4 GHz的频段&#xff0c;因为频道过少、使用技术过多太过拥挤&#xff0c;频宽性能不佳早已不是新闻。在5 GHz的频段&#xff0c;频道数大幅超过2.4 GHz&#xff0c;但其中也有一大部份是DFS频道…

【MySQL高级篇】第04章_逻辑架构

第04章_逻辑架构 1. 逻辑架构剖析 1.1 服务器处理客户端请求 首先MySQL是典型的C/S架构&#xff0c;即Clinet/Server 架构&#xff0c;服务端程序使用的mysqld。 不论客户端进程和服务器进程是采用哪种方式进行通信&#xff0c;最后实现的效果是&#xff1a;客户端进程向服…

线程池的原理

1. 为什么要用线程池降低资源消耗。通过重复利用已创建的线程降低线程创建、销毁线程造成的消耗。提高响应速度。当任务到达时&#xff0c;任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源&#xff0c;如果无限制的创建&#xff0c;不仅会消耗系统…

Javaweb之会话跟踪技术

1.会话跟踪技术的概述 会话跟踪技术就是处理一次会话中多次请求间数据共享问题 会话:用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应。 从浏览器发出请求到服务…

vue 行内样式 px 单位 转换为 vw

vue2 安装 插件 npm i style-vw-loader --save vue.config.js 文件配置 module.exports {chainWebpack: (config) > {config.module.rule(vue).test(/\.vue$/).use(style-vw-loader).loader(style-vw-loader).options({unitToConvert: "px",//需要转换的单位vi…