【C++】map/multimap容器

2023-11-02

1.map基本概念

在这里插入图片描述

2.map构造和赋值

在这里插入图片描述

#include <iostream>
using namespace std;

//map容器 构造和赋值
#include<map>

//遍历输出map容器
void printMap(const map<int, int>& m)
{
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
	{
		cout << "key = " << (*it).first << "value = " << it->second << endl;
	}
	cout << endl;
}

void test01()
{
	//创建map容器
	map<int, int>m;

	//按照key值自动排序
	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);

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

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

int main()
{
	test01();
	//cout << "-------------" << endl << endl;
	//test02();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

3.map大小和交换

在这里插入图片描述

#include <iostream>
using namespace std;

//map容器 大小和交换
#include<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 << "size of 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>(6, 300));
	m2.insert(pair<int, int>(5, 200));

	cout << "交换前:" << endl;
	printMap(m);
	printMap(m2);

	//m与m2交换
	m.swap(m2);
	cout << "交换后:" << endl;
	printMap(m);
	printMap(m2);
}

int main()
{
	test01();
	cout << "-------------" << endl << endl;
	test02();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

4.map插入和删除

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

//map容器 插入和删除
#include<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容器
	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;

	//[]不建议插入, []其用途 可以利用可以访问到value
	//cout << m[5] <<endl; //输出了" key = 5   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();
	//cout << "-------------" << endl << endl;
	//test02();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

5.map查找和统计

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

//map容器 查找和统计
#include<map>
void test01()
{
	//查找
	map<int, int>m;
	m.insert(make_pair(1, 10));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(2, 20));
	m.insert(make_pair(2, 40)); // 不能插入重复元素(以key为标准)


	map<int, int>::iterator pos = m.find(3);

	if (pos != m.end())
	{
		cout << "找到了该元素  key = " << (*pos).first << " value = " << pos->second << endl;
	}
	else
	{
		cout << "no find this element" << endl;
	}

	//统计
	//map不允许插入重复元素, count统计而言 结果只能是0或1
	//multimap的count统计可能大于1
	int num = m.count(2);
	cout << "num = " << num << endl;
}

int main()
{
	test01();
	//cout << "-------------" << endl << endl;
	//test02();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

6.map容器排序

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

//map容器 排序
#include<map>

class MyCompare
{
public:
	bool operator()(int v1, int v2) const
	{
		return v1 > v2; // 降序
	}
};

void test01()
{
	//默认从小到大排序
	//利用仿函数实现从小到大排序
	map<int, int, MyCompare> m;
	m.insert(make_pair(1, 10));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(2, 20));

	for (map<int, int, MyCompare>::iterator it = m.begin(); it != m.end(); it++)
	{
		cout << "key = " << it->first << "   value = " << it->second << endl;
	}
}

int main()
{
	test01();
	//cout << "-------------" << endl << endl;
	//test02();

	//**************************************
	system("pause");
	return 0;
} 

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++】map/multimap容器 的相关文章

随机推荐

  • CCF计算机软件能力认证 C++ 权限查询

    问题描述 授权 authorization 是各类业务系统不可缺少的组成部分 系统用户通过授权机制获得系统中各个模块的操作权限 本题中的授权机制是这样设计的 每位用户具有若干角色 每种角色具有若干权限 例如 用户 david 具有 mana
  • Python Flask简介及安装

    Python Flask简介及安装 Flask 是一个 Python 实现的 Web 开发微框架 一 Flask 简介 Flask 诞生于2010年 是 Armin ronacher 人名 用 Python 语言基于 Werkzeug 工具
  • 嵌入式复习题(五)程序分析题

    1 定时器 假设定时器内部时钟为16MHz 1 完成下面的注释 2 可以定时的时间为 5 ms htim3 Instance TIM3 htim3 Init Prescaler 799 预分频系数为799 htim3 Init Counte
  • 【Network】计算机网络基础知识总结

    阅读目录 网络层次划分 OSI七层网络模型 IP地址 子网掩码及网络划分 ARP RARP协议 路由选择协议 TCP IP协议 UDP协议 DNS协议 NAT协议 DHCP协议 HTTP协议 一个举例 网络层次划分 为了使不同计算机厂家生产
  • 神经网络学说的主要观点,对神经网络的简单理解

    心理学中定位说和模块说的区别是 整体说和神经网络学说的区别是 模块说和神经网络学说的区别是 简单说下 希望对你有帮助 定位说认为 大脑的具体功能是对应具体的部位 模块说认为 大脑的具体功能是由多个部位形成的模块共同实现的 而不是具体到位置
  • 论文理解:Generating Diverse High-Fidelity Images with VQ-VAE-2

    深度生成模型都有什么问题 研究者将常见的生成模型分为两种 一种是基于似然的模型 包括 VAE 及其变体 基于流的模型 以及自回归 autoregressive 模型 另一种是隐式生成模型 如生成对抗网络 GAN 这些模型都会存在某些方面的缺
  • 例说数据结构&STL(九)——map

    1 白话map map是STL的一个关联容器 它提供一对一 其中第一个可以称为关键字 每个关键字只能在map中出现一次 第二个可能称为该关键字的值 的数据处理能力 由于这个特性 它完成有可能在我们处理一对一数据的时候 在编程上提供快速通道
  • 【Linux】进程信号及信号产生

    文章目录 一 生活层面的信号 二 进程信号 三 硬件中断 四 信号产生 五 Term Core 1 核心转储的意义 2 云服务器为什么关闭核心转储 3 core dump标志 六 总结 结束语 一 生活层面的信号 在学习进程信号前 我们不妨
  • list 返回json 时 结果出现“$ref“:“$.data[0]“

    1 传入list的对象必须不是创建的一个对象 因为创建一个对象即使复制不同 但是hashcode相同 到json是无法解析 例如 new CheckFavoriteSupplierDto 需要每个都要new新对象 写for循环外会出现 re
  • 【电压质量】提高隔离电源系统的电压质量(Simulink实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 仿真1 2 2 仿真2 3 参考文献 4 Simulink实现 1 概述 为了提高隔
  • 几种数据库的jdbc驱动实现

    要实现自己的JDBC驱动 最重要的是实现以下几个接口 java sql Driver java sql Connection java sql Statement java sql ResultSet 这篇文章讲解了如何实现一个简单的jdb
  • FreeCAD sketcher草图模式下旋转部分绘制的图形

    有时候我们在草图绘制的时候需要画多个形状一样但是方向不一样的元素 一个一个绘制肯定不符合咱么计算机基本理论 复制 粘贴 但是理论上直接选中几个绘制好的元素 可以复制 克隆 镜像 但是无法直接旋转任意角度 我也为此苦恼了许久 难道一个大名鼎鼎
  • Python学习——作图plt.cm.Set()用法

    https blog csdn net qq 41938858 article details 87705470
  • 解决Springboot 'jmsMessagingTemplate' not loaded because Ancestor org.springframework.boot.autoconfig

    问题来源 SpringBoot集成Activemq 报错内容 Description Field jmsTemplate in com xihuanyuye Producer required a bean of type org spri
  • Android爬取网页JSON数据详细教程【新手向】

    这几天做一个Android获取Json的任务 发现Jsoup只能获取静态页面 无法获取动态页面的Json数据 有同学给我更正 Jsoup可以爬取动态页面 但必须要加请求头 data 以下为正确例子 String url 你的网页接口 Map
  • PAT题库代码(个人版本)~~持续更新,持续改进!

    引言 之前在网上看到浙江大学的题目系统PAT 想要刷一刷玩 目前是乙级题库 题目不多 持续更新 努力 话不多说 上代码 题目以及运行效果这里就不给出了 与PAT网站上的相同 1002 写出这个数 include
  • CMOS到触发器(一)

    1 MOS晶体管结构与工作原理简述 我们或多或少知道 晶体管在数字电路中的主要作用就是一个电子开关 通过电压或者电流 控制这个 开关 开还是关 晶体管大概有两种分类 一种是双极性晶体管 BJT bipolar junction transi
  • AJAX模拟Form表单上传

    当前端上传图片的时候 需要传递给后端的是一个file对象 而不是一个路径 而files就是包含了图片的所有设置 包括大小 类型 内容等等 var xxx this container find xxx 0 files 将jquery转换成d
  • IDEA主菜单栏不小心按消失了的解决方法

    如图所示 这两行的消失解决方法如下 第一行 在代码区按两下shift键 出现搜索栏 在搜索栏里输入view 如下 这里没有找到Main Menu 点击左下方的很小的more 显示如下 找到Main Menu 点击使其变为ON即可 第二行 点
  • 【C++】map/multimap容器

    1 map基本概念 2 map构造和赋值 include