c++STL—容器map/multimap

news2024/12/24 20:12:28

目录

1、map基本概念

1.1、简介

1.2、本质

1.3、优点

1.4、map和multimap区别

2、map构造和赋值

2.1、功能描述

2.2、函数原型

2.3、示例

3、map的大小和交换

3.1、功能描述

3.2、函数原型

3.3、示例

4、map插入和删除

4.1、功能描述

4.2、函数原型

4.3、示例

5、map查找和统计

5.1、功能描述

5.2、函数原型

5.3、示例

6、map容器排序

6.1、学习目标

6.2、主要技术点

6.3、示例


1、map基本概念

1.1、简介

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

1.2、本质

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

1.3、优点

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

1.4、map和multimap区别

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

2、map构造和赋值

2.1、功能描述

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

2.2、函数原型

构造:

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

赋值:

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

2.3、示例

//map的构造和赋值
void printMap(map<int,string> m) {
	map<int, string>::iterator it;
	it = m.begin();
	for (int i = 0; i < m.size();i++) {
		cout<<"key = "<<it->first<<"  value = "<<it->second<<endl;
		it++;
	}
	cout << endl;
}

void test01() {
	//1、默认构造
	map<int, string> mp;

	mp.insert(make_pair(1,"zhangsan"));
	mp.insert(make_pair(2,"lisi"));
	mp.insert(make_pair(3,"wangwu"));
	mp.insert(make_pair(4,"laoliu"));
	mp.insert(make_pair(5,"xiaoqi"));
	printMap(mp);

	//2、拷贝构造
	map<int, string> mp2(mp);
	printMap(mp2);

	//3、赋值
	map<int, string> mp3;
	mp3 = mp2;
	printMap(mp3);

}

int main() {
	test01();
	system("pause");
	return 0;
}

注意事项:map中所有元素都是成对出现,插入数据时需要使用对组pair

3、map的大小和交换

3.1、功能描述

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

3.2、函数原型

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

3.3、示例

//map的大小和互换
void printMap(map<int, string> m) {
	map<int, string>::iterator it;
	it = m.begin();
	for (int i = 0; i < m.size(); i++) {
		cout << "key = " << it->first << "  value = " << it->second << endl;
		it++;
	}
	cout << endl;
}

void test01() {
	map<int, string> mp;

	mp.insert(make_pair(1, "zhangsan"));
	mp.insert(make_pair(2, "lisi"));
	mp.insert(make_pair(3, "wangwu"));
	mp.insert(make_pair(4, "laoliu"));

	map<int, string> mp1;

	mp1.insert(make_pair(4, "哈哈哈"));
	mp1.insert(make_pair(6, "啦啦啦"));
	mp1.insert(make_pair(8, "嘿嘿嘿"));
	
	//1、判断是否为空
	if (mp.empty()) {
		cout << "map容器为空" << endl;
	}
	else {
		cout << "map容器不为空" << endl;
		//2、访问大小
		cout << "map容器的大小为:" << mp.size() << endl;
	}

	//3、交换
	cout << "交换前:" << endl;
	printMap(mp);
	printMap(mp1);

	mp.swap(mp1);
	cout << "交换后:" << endl;
	printMap(mp);
	printMap(mp1);

}

int main() {
	test01();
	system("pause");
	return 0;
}

4、map插入和删除

4.1、功能描述

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

4.2、函数原型

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

4.3、示例

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

void test01() {
	int key[] = { 1,2,3,4,5 };
	char val[] = { 'a','b','c','d','e' };
	map<int, char> m;
	for (int i = 0; i < sizeof(key) / sizeof(key[0]);i++) {
		//1、插入
		m.insert(make_pair(key[i], val[i]));//1、第一种插入
	}
	printMap(m);
	
	m.insert(map<int,char>::value_type(6,'f'));//第二种插入
	
	m.insert(pair<int, char>(7, 'g'));//第三种插入
	
	m[8] = 'h';//第四种插入(不推荐使用)
	printMap(m);

	cout << m[3] << endl;//多数用于通过键,访问值

	//2、删除
	m.erase(m.begin());	//指定位置

	m.erase(7);//通过键删除
	printMap(m);

	m.erase(m.begin(),m.end());//通过区间删除(此区间为删除所有)
	printMap(m);

	//3、清空
	m.clear();
	printMap(m);
}

int main() {
	test01();
}

5、map查找和统计

5.1、功能描述

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

5.2、函数原型

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

5.3、示例

//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(make_pair(1, 10));
	m.insert(make_pair(2, 20));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(4, 40));

	printMap(m);

	//1、查找
	map<int, int>::iterator it = m.find(4);
	if (it!= m.end()) {
		cout << "找到了" << endl;
		cout << "key = " << it->first << " value = " << it->second << endl;
	}
	else {
		cout << "未找到" << endl;
	}

	//2、统计
	int ret = m.count(3);
	cout << "key = 3 出现:" << ret <<"次" << endl;
}

int main() {
	test01();
}

6、map容器排序

6.1、学习目标

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

6.2、主要技术点

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

6.3、示例

//map的排序
class myCompare {
public:
	bool operator()(int v1, int v2)const {
		return v1 > v2;
	}
};

void test01() {
	//1、默认升序
	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(4, 40));

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

	//2、重写(),改变排序规则
	map<int, int,myCompare> m1;
	m1.insert(make_pair(1, 10));
	m1.insert(make_pair(2, 20));
	m1.insert(make_pair(4, 40));
	m1.insert(make_pair(3, 30));	

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

int main() {
	test01();
}

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

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

相关文章

【利用AI让知识体系化】解锁异步编程的新世界!

文章目录 I. 前言简介异步在计算机编程中的应用 II. 同步与异步定义与区别同步编程的缺点 III. 异步编程定义应用场景回调函数Promise对象async/await关键字事件循环 IV. 异步编程实例Node.js中使用异步编程异步HTTP请求实现异步文件操作 V. 异步编程的优势VI. 异步编程的挑战与…

Docker 运行 jenkins

概述 虚拟机启动Docker&#xff0c;运行Jenkins&#xff0c;进行代码拉取测试 实现功能&#xff1a; 1. 可链接外网 2. 可拉取仓库代码 3. 基本配置 部署 拉取镜像 docker search jenkins docker pull jenkins/jenkins 创建工作目录 # 创建目录 给工作挂载目录赋予权限 mk…

KingbaseES V8R6 数据库运维案例之 -- root用户securecmd连接'Permission denied'错误

案例分析&#xff1a; 在KingbaseES V8R6数据库在不支持ssh连接的系统环境&#xff0c;可以通过securecmdd服务建立主机之间的通讯&#xff0c;默认securecmdd服务建立用户之间的互信&#xff0c;通过publickey认证建立访问连接。在配置securecmdd服务后&#xff0c;默认kingba…

JavaScript实现计算1-100之间不能被7整除的数的和的代码

以下为实现计算1-100之间不能被7整除的数的和的程序代码和运行截图 目录 前言 一、实现计算1-100之间不能被7整除的数的和 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.…

【JavaWeb】--06.Filter、Listener、Ajax、Vue

文章目录 Filter1.概述2.快速入门2.1 开发步骤2.2 代码演示 3.Filter执行流程4. Filter拦截路径配置5.过滤器链5.1 概述5.2 代码演示5.3 问题 Listener1.概述2. 分类3.代码演示 Ajax1.概述1.1作用1.2 同步和异步 2.快速入门2.1 服务端实现2.2 客户端实现2.3 测试 3.axios3.1 基…

MVC 三层架构案例详细讲解

MVC 三层架构案例详细讲解 文章目录 MVC 三层架构案例详细讲解每博一文案1. MVC 概述2. MVC设计思想3. 三层架构4. MVC 与 三层架构的关系&#xff1a;5. 案例举例&#xff1a;用户账户转账5.1 M&#xff08;Model &#xff1a;数据/业务处理层&#xff09;5.2 C (Controller :…

软件测试实验:Web应用测试

目录 前言Web应用的特点实验目的实验内容实验要求实验过程系统测试用例系统测试执行记录系统测试缺陷报告 总结 前言 软件质量保证与测试技术实验是一门旨在培养学生掌握软件测试的基本理论和方法的课程。本实验主要涉及Web应用测试&#xff0c;包括以下几个方面&#xff1a;一…

Scala初学者指南

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 文章目录 Scala跟Java的区别和联系Scala安装Scala中的数据类型Scala语法val和var泛型包导入包对象特质运算符传名参数implicitObject和Class样例类_(下划线)println集合ListMapRange 迭代器Tuple提取器对象流…

代码随想录 哈希表 Java

文章目录 &#xff08;简单&#xff09;242.有效的字母异位词&#xff08;简单&#xff09;383. 赎金信&#xff08;中等&#xff09;49. 字母异位词分组&#xff08;*中等&#xff09;438. 找到字符串中所有字母异位词&#xff08;简单&#xff09;349. 两个数组的交集&#x…

CyberLink的专业视频编辑软件ActionDirector Ultra 3.0版本在win10系统的下载与安装配置教程

目录 前言一、ActionDirector Ultra安装二、使用配置总结 前言 ActionDirector Ultra是CyberLink公司开发的专业视频编辑软件&#xff0c;旨在帮助用户创作高质量的运动和冒险视频。该工具提供了一些先进的特效和编辑工具&#xff0c;让用户能够轻松地剪辑、修剪、调整颜色和添…

队列实现栈(你看我讲的是不是最细的就完了)

最伟大的成就往往起源于最强烈的热情。 -- 诺曼文森特皮尔目录 &#x1f5fc;一.队列实现栈 &#x1f345;二.使用两个队列来模拟实现栈 &#x1f34b;1.栈结构体包含两个队列 &#x1f352;2.创建一个结构体的指针 &#x1f342;3.myStackPush入栈操…

【小沐学Python】Python实现Web图表功能(ECharts.js,Flask)

&#x1f388;&#x1f388;&#x1f388;Python实现Web图表功能系列&#xff1a;&#x1f388;&#x1f388;&#x1f388;1&#x1f388;【Web开发】Python实现Web图表功能&#xff08;D-Tale入门&#xff09;&#x1f388;2&#x1f388;【Web开发】Python实现Web图表功能&a…

编程不头秃,Google「AI程序员」来了,聊天就能敲代码

上周 Google 在 I/O 大会宣布了一个能够辅助编程的聊天机器人 Codey&#xff0c;现在它终于上线 Google Colab 啦&#xff01; &#x1f31f; Codey 是基于 Google 目前最新的大语言模型 PaLM 2 运行&#xff0c;有着强大的语言理解和编程能力。 Codey 有这些功能&#xff1…

【k8s】【ELK】【三】Sidecar容器运行日志Agent

1、日志收集场景分析与说明 对于那些能够将日志输出到本地文件的Pod&#xff0c;我们可以使用Sidecar模式方式运行一个日志采集Agent&#xff0c;对其进行单独收集日志1、首先需要将Pod中的业务容器日志输出至本地文件&#xff0c;而后运行一个Filebeat边车容器&#xff0c;采…

chatgpt赋能Python-python3_绝对值

Python3中的绝对值 在本文中&#xff0c;我们将深入了解Python3中的绝对值&#xff08;Absolute Value&#xff09;以及如何在Python3中使用它。 我将介绍Python3的abs函数&#xff0c;它是一个内置函数&#xff0c;用于计算数字的绝对值。 什么是绝对值&#xff1f; 在数学…

详解MySQL主从复制

目录 1.概述 2.配置使用 2.1.master配置 2.2.slave配置 2.3.认主 2.4.确认认主结果 3.请求分发 3.1.概述 3.2.手动分发 3.2.1.原生JDBC 3.2.2.数据源 3.2.3.中间件 1.概述 在实际的数据密集型应用中&#xff0c;数据库层面往往呈现两个特点&#xff1a; 单点数据…

VONR排查指导分享

不能注册或呼叫到SIP服务器端30秒挂断呼叫的黄金法则咬线或摘机状态单通或无语音收到400 bad request收到413&#xff0c;513 Request Entity Too Large或Message Too Large消息收到408&#xff0c; 480或者487 消息483 - Too Many Hops488 – Not Acceptable Here语音质量和思…

chatgpt赋能Python-python3_9怎么安装

Python 3.9&#xff1a;安装指南 如果你正在学习编程或者已经是一名程序员&#xff0c;那么一定会了解到Python这个编程语言。Python是一种高级编程语言&#xff0c;其强大的设计特点和易于操作的特性使其成为了开发人员的首选。Python 3.9已经发布了&#xff0c;它虽然不是Py…

CSDN官方创作助手InsCode AI 教你分分钟搞定一篇好文章

CSDN官方推出创作助手InsCode AI很多天了&#xff0c;有心人都能发现&#xff0c;在写作界面的右上角多了一个创作助手的浮动按钮&#xff0c;点击后出现如下界面&#xff1a; 现阶段是“限免”状态&#xff0c;不好好利用它来创作&#xff0c;就有点辜负CSDN官方大佬们的良苦用…

【王道·计算机网络】第五章 传输层【未完】

一、传输层概述 传输层为应用层提供通信服务&#xff0c;使用网络层服务传输层的功能&#xff1a; 提供进程和进程之间的逻辑通信&#xff08;网络层提供主机之间的逻辑通信&#xff09;复用&#xff08;发送发不同的应用进程&#xff09;和分用&#xff08;接收方正确的数据传…