C++基础STL-map容器

news2024/9/20 18:53:44

map容器介绍:        

        作为关联式容器的一种,map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括 C++基本数据类型(int、double 等)、使用结构体或类自定义的类型。(pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)),所有元素都会根据元素的键值自动排序。

        (可以简单理解成python中的字典)

map和multimap区别:

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

目录

map构造和赋值

map大小和交换

map插入和删除

map查找和统计

map容器排序

总结:

​​​​​​​

map构造和赋值

构造:

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

赋值:

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

示例:

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>(2, 20));
	m.insert(pair<int, int>(3, 30));
	printMap(m);

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

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

运行结果:

map大小和交换

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

示例:

//大小
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 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, 100));
	m2.insert(pair<int, int>(5, 200));
	m2.insert(pair<int, int>(6, 300));

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

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

运行结果:

map插入和删除

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

示例:

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] = 40; 
	printMap(m);

	//删除
	m.erase(m.begin());
	printMap(m);

	m.erase(3);
	printMap(m);

	//清空
	m.erase(m.begin(),m.end());
	m.clear();
	printMap(m);
}

运行结果:

map查找和统计

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

示例:

//查找和统计
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));

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

	if (pos != m.end())
	{
		cout << "找到了元素 key = " << (*pos).first << " value = " << (*pos).second << endl;
	}
	else
	{
		cout << "未找到元素" << endl;
	}

	//统计
	int num = m.count(3);
	cout << "num = " << num << endl;
}

运行结果:

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

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

运行结果:

总结:

        在统计字符串或数组中不同元素出现次数时,我们常常会用到map容器,Key-Value的形式使我们可以方便的查询和记录Value值。

        至此,STL常见容器,就介绍完了,我们对C++中STL容器中的常见容器以及其基本操作,有了一个大致的了解。

STL其他容器链接:

STL-set容器_小梁今天敲代码了吗的博客-CSDN博客

STL-list容器_小梁今天敲代码了吗的博客-CSDN博客

STL-deque容器_小梁今天敲代码了吗的博客-CSDN博客

STL-stack容器和queue容器_小梁今天敲代码了吗的博客-CSDN博客

STL-Vector容器_小梁今天敲代码了吗的博客-CSDN博客

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

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

相关文章

快速入门matlab——变量练习

学习目标&#xff1a;1.掌握matlab编程中最常用的几种变量类型 2.对变量类型的属性有所熟悉&#xff0c;不要求记忆&#xff0c;知道了解即可 3.要求熟练运用这几种变量类型创建自己的变量 clear all; % 清除Workspace中的所有…

服务网格:优化微服务通信与保障系统安全性的架构利器

文章目录 服务网格&#xff1a;优化微服务通信与保障系统安全性的架构利器1. 什么是服务网格&#xff1f;微服务架构概述&#xff1a;服务网格的定义和作用&#xff1a; 2. 服务网格的特点&#xff1a;透明性&#xff1a;无需修改应用代码服务发现与负载均衡&#xff1a;动态发…

GPT3.5 VS GPT-4写领导讲话稿,谁是最强笔杆子?

正文共 1240 字&#xff0c;阅读大约需要 5 分钟 文秘/公务员必备技巧&#xff0c;您将在5分钟后获得以下超能力&#xff1a; 快速生成领导讲话稿 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 | Linda ●…

redis持久化配置

回顾&#xff1a;rpcbind111 nfs2049 redis高可用高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%&#xff0c;99.99%&#xff0c;99.999%等&#xff09; 还要考虑提供主从分离&#xff0c;快速容灾技术&#…

在 React 中使用 highlight.js 和 Clipboard.js 实现代码块和复制功能

参考链接&#xff1a;https://blog.csdn.net/huangjuan0229/article/details/130319050 在前端开发中&#xff0c;代码块高亮和复制功能是十分常见的需求。而在 React 中&#xff0c;常用的代码高亮库是 highlight.js&#xff0c;常用的复制库是 Clipboard.js。本篇文章将介绍…

新版 钥证书模式加签模式支付宝官方支付对接·错误代码 missing-signature 错误原因: 缺少签名参数 解决方案

新版密钥证书加签模式支付宝官方支付对接错误代码 missing-signature 错误原因: 缺少签名参数 解决方案 大家好我是优雅草伊凡&#xff0c;最近处理的问题特别多每天忙得不可开交&#xff0c;但是我相信后续要写的内容和记录下的问题是越来越多了&#xff0c;其他同事忙着开发…

10-02 单元化架构核心问题与概念

单元化架构产生的原因 应对增长 传统架构无法处理日益增长的互联网用户需求扩容 需要新架构更近一部提升了系统的扩展能力系统稳定性 新架构需要高可用、相对独立和故障隔离使整体系统更稳定灰度发布 系统和组件都纳入版本管理&#xff0c;按需部署进行灰度发布 核心问题 应…

成都待慕电商:抖音百亿现金扶持商家

新京报贝壳财经讯5月16日&#xff0c;抖音电商在广州举办第三届生态大会。抖音电商总裁魏雯雯透露&#xff0c;过去一年&#xff0c;抖音电商GMV&#xff08;商品交易总额&#xff09;同比增长80%&#xff0c;其中&#xff0c;货架场景GMV占比达30%&#xff0c;平台售出超300亿…

公司新招了个字节拿36K的人,让我见识到了什么才是测试扛把子......

5年测试&#xff0c;应该是能达到资深测试的水准&#xff0c;即不仅能熟练地开发业务&#xff0c;而且还能熟悉项目开发&#xff0c;测试&#xff0c;调试和发布的流程&#xff0c;而且还应该能全面掌握数据库等方面的技能&#xff0c;如果技能再高些的话&#xff0c;甚至熟悉分…

【目标检测】基于yolov5的交通标志检测和识别(可识别58种类别,附代码和数据集)

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 文末附项目代码和数据集,请看检测效果: 1. 介绍 YOLOv5是一种用于目标检测的深度学习算法,它能够在高速和高精度的情…

Spring中的@Value注解详解

Spring中的Value注解详解 概述 本文配置文件为yml文件 在使用spring框架的项目中&#xff0c;Value是经常使用的注解之一。其功能是将与配置文件中的键对应的值分配给其带注解的属性。在日常使用中&#xff0c;我们常用的功能相对简单。本文使您系统地了解Value的用法。 Value…

人工智能的新时代:讯飞星火大模型Vs ChatGPT

近日&#xff0c;科大讯飞召开了星火认知大模型成果发布会&#xff0c;会上表示讯飞星火大模型将突破开放式问答&#xff0c;对标ChatGPT&#xff0c;在中文能力上超过ChatGPT&#xff0c;在英文能力上与ChatGPT相当。对此&#xff0c;你怎么看&#xff1f; 一、你有使用过这种…

在 Golang 中执行 Shell 命令

原文标题&#xff1a;Executing Shell Commands in Golang 作者&#xff1a;Soham Kamani 之前自己也写过 os/exec 包执行 Shell 命令的文章&#xff0c;但是没有这篇讲的详细&#xff0c;感兴趣可以看看&#xff0c;点此处。 在本教程中&#xff0c;我们将学习如何在 Golang …

融云 WICC 2023 定档!「出海嘉年华」穂城来袭!

集赞获纸质版《作战地图》 阔别一年&#xff0c;通信行业年度盛会 WICC 即将重磅回归。移步【融云全球互联网通信云】回复“地图”免费领 6 月 2 日&#xff08;周五&#xff09;&#xff0c;融云与白鲸出海联合主办、以“聚势突围&#xff0c;布局全球”为主题的“WICC 社交…

进程线程常见面试题及基础知识

1 进程 我们编写的代码只是一个存储在硬盘的静态文件&#xff0c;通过编译后就会生成二进制可执行文件&#xff0c;当我们运行这个可执行文件后&#xff0c;它会被装载到内存中&#xff0c;接着 CPU 会执行程序中的每一条指令&#xff0c;那么这个运行中的程序&#xff0c;就被…

一起内核线程异常占用CPU资源的排查过程

1、软硬件环境 硬件&#xff1a; NXP LS1043A 4核 cortex-A53 软件&#xff1a; linux 5.10.35 2、问题现象 最近有个产品要把内核从4.19升级到 5.10.35版本&#xff0c;产品在内核版本4.19工作正常&#xff0c;升级到5.10.35以后&#xff0c;产品在不接任何外设&#xff0c;…

【基础1】SQL 数据库分类 代码建库、代码修改属性 代码建表 代码修改数据表属性 代码为数据表插入信息 数据的修改与删除

目录 数据库基础 代码建库 数据完整性 代码建表 数据库基础 系统数据库&#xff1a;master、model、tempdb、madb数据库文件的组成&#xff1a;【数据文件可以放在不同的文件组里】 主数据文件&#xff1a;*.mdf 主数据文件只能有一个次要数据文件&#xff1a;*.ndf日志文…

DolphinScheduler 集群模式部署

文章目录 DolphinScheduler 集群模式部署一、集群规划1、前置准备工作2、解压DolphinScheduler 安装包3、创建元数据库及用户 二、配置一键部署脚本1、初始化数据库2、一键部署 DolphinScheduler3、DolphinScheduler 启停命令 DolphinScheduler 集群模式部署 一、集群规划 集…

01.数据结构和算法概述

前言 数据结构是一个古老的课题。他与程序开发息息相关&#xff0c;但是我们日常开发中&#xff0c;好像很少让我们自己设计一个数据结构。只求程序能跑&#xff0c;并不太关注性能。但是它是我们软件开发人员的基本功&#xff0c;也是拉开普通程序员和高级程序员的一个门槛&a…

Selenium浏览器交互原理与应用,玩转Web自动化测试

目录 前言: 浏览器交互&#xff1a; Selenium的实现方式&#xff1a; Selenium WebDriver&#xff1a; WebDriver的等待机制: 总结&#xff1a; Web自动化测试&#xff1a; 前言: Web自动化测试是现代软件开发中必不可少的一个环节&#xff0c;它可以帮助开发人员快速自动…