【C++中STL】map/multimap容器

map/multimap容器

  • map基本概念
    • map构造和赋值
    • map的大小和交换
    • map插入和删除
    • map的查找和统计
  • map排序

map基本概念

map中的所有元素都是pair对组,高效率,pair中的第一个元素为key(键值),起到索引作用,第二个元素为value(实值),所有元素都会根据元素的键值自动排序。map/multimap属于关联式容器,底层结构是用而二叉树实现。可以根据key值快速找到value值。map和multimap的区别是map不允许容器中有重复key值元素;multimap允许容器中有重复key值元素。

map构造和赋值

1、map<T1,T2> mp;默认构造函数
2、map(const map &mp);拷贝构造函数
3、map& operator=(const map &mp);赋值

void p(const map<int,int>&s) {
	for (map<int,int>::const_iterator it = s.begin();it != s.end();it++) {
		cout << "Key:" << (*it).first << "\tValue:" << it->second << endl;;
	}
	cout << endl;
}
void test1() {
	map<int, int> m;
	m.insert(pair<int, int>(1, 10));
	m.insert(pair<int, int>(2, 24));
	m.insert(pair<int, int>(3, 15));
	m.insert(pair<int, int>(4, 57));
	p(m);
	map<int, int> m2(m);
	p(m2);
	map<int, int>m3;
	m3 = m2;
	p(m3);
}

map的大小和交换

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

void test1() {
	...
	if (!m.empty()) {
		cout << "不为空" << endl;
		cout << "大小:" << m.size() << endl;
	}
	...
	m1.swap(m);
	p(m);
}

map插入和删除

1、insert(elem);插入,只有这一种方法
2、clear();清空所有元素
3、erase(pos);删除pos位置的元素,返回下一个数据的位置
4、erase(beg,end);删除迭代器从beg到end之间的元素,返回下一个数据的位置
5、erase(key);删除容器中值为key的元素

void test1() {
	...
	m.erase(m.begin());
	m.erase(++m.begin(), --m.end());
	p(m);
	m.erase(2);
	p(m);
	m.clear();
	p(m);
}

在这里插入图片描述

map的查找和统计

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

void test1() {
	...
	map<int,int>::iterator pos = m.find(40);
	if (pos != m.end()) {
		cout << "查到元素的key=" << (*pos).first << "查到元素的value=" << (*pos).second << endl;
	}
	else {
		cout << "没找到" << endl;
	}
	cout << m.count(1)<<endl;//统计的结果式0或1
}

map排序

利用仿函数改变排序规则,默认升序从小到大。在定义时确定排序规则。

class MyCompare {
public:
	bool operator()( int v1, int v2)const {
		return v1 > v2;
	}
};
//内置类型排序
void test1() {
	...
	//按key排序
	for (map<int, int, MyCompare>::const_iterator it = m.begin();it != m.end();it++) {

		cout << "Key:" << (*it).first << "\tValue:" << it->second << endl;;
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

硬件基础:存储器

之前对存储器做过简单的汇总&#xff0c;参考这篇文章&#xff1a; 计算机/微机存储技术_路溪非溪的博客-CSDN博客 这次&#xff0c;我们从数字集成电路的角度再次补充学习一下存储器的知识。 定义和分类 从这里面我们能知道一些关键词。 存储介质主要是半导体器件和磁性材料。…

C语言指针进阶之一字符指针

目录 1.指针知识回顾 2.字符指针 2.1字符指针的一般使用 2.2字符指针的另外一种使用 1.指针知识回顾 ①.指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识了一片空间。 内存会划分成一个个的内存单元&#xff0c;每个内存单元都有一个独立的编号&#xff0…

Vue深入学习3—数据响应式原理

1、数据响应式原理 1.1、MVVM是什么&#xff1f; 简单来说&#xff0c;就是数据变了&#xff0c;视图也会跟着变&#xff0c;首先你得定义一个带有{{ }}的模板Model&#xff0c;当数据中的值变化了&#xff0c;视图View就会跟着变化&#xff1b;视图模型View-model是模板Model和…

C++ 类的初始化列表

C 中的类必须使用初始化列表的 4 种情况&#xff1a; 一&#xff0c;继承于一个基类&#xff0c;这个基类的构造函数有参数时。 #include <stdio.h> #include <stdlib.h>#pragma pack(4) class CBase { public:CBase(int value): bBaseValue(value){}~CBase(){}p…

代码随想录算法训练营31期day4,力扣24+19+02.07+142

24&#xff0c;动指针 class Solution { public:ListNode* swapPairs(ListNode* head) {//建立虚拟头结点auto dummynew ListNode(-1);dummy->nexthead;for(auto pdummy;p->next&&p->next->next;){auto ap->next;auto ba->next;p->nextb;a->n…

详解SpringCloud之远程方法调用神器Fegin

第1章:引言 咱们作为Java程序员,在微服务领域里,Spring Cloud可谓是个耳熟能详的大名。它提供了一套完整的微服务解决方案,其中就包括了服务间的通信。在这个微服务中,有一个成员特别引人注意,它就是Feign。 那Feign到底是什么呢?简单来说,Feign是一个声明式的Web服务…

linux条件判断练习

1.实现自动生成相应的压缩包 1.写一个脚本&#xff0c;完成如下功能 传递一个参数给脚本&#xff0c;此参数为gzip、bzip2或者xz三者之一&#xff1b; (1) 如果参数1的值为gzip&#xff0c;则使用tar和gzip归档压缩/etc目录至/backups目录中&#xff0c;并命名为/backups/etc-…

1块9毛钱,修复拓牛TC1D智能垃圾桶盖子不能正常开合的故障

前言 21年9月份买了拓牛的智能垃圾桶&#xff0c;一直用的很流畅&#xff0c;再加上屋里没啥有机垃圾&#xff0c;也没有宠物&#xff0c;用上之后每次投入垃圾&#xff0c;之后都会盖上盖子&#xff0c;没有很多的异味散发&#xff0c;屋里也没有蟑螂等害虫。 再加上门口有帘…

Android开发学习-Activity

启停活动页面 1、启动和停止 startActivity(new Intent(原页面.this,目标页面.this)); startActivity(new Intent(this,ActFinishActivity.class)) 从当前页面回到上一个页面&#xff0c;相当于关闭当前页面&#xff0c;返回代码如下&#xff1a; finish(); 2、生命周期 …

鸿蒙:@Link装饰器-父子双向同步

子组件中被Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。从API version 9开始&#xff0c;该装饰器支持在ArkTS卡片中使用。 需要注意&#xff1a;Link装饰的变量与其父组件中的数据源共享相同的值。Link装饰器不能在Entry装饰的自定义组件中使用。 一、装饰器使…

基于Python对二手车之家的数据采集与分析

1.1 用户需求 1.1.1 背景与现状 基于Python的二手车之家数据采集与分析的背景与现状分析 背景&#xff1a; 随着经济的发展和人们生活水平的提高&#xff0c;二手车市场逐渐兴起。二手车之家作为中国最大的二手车交易平台之一&#xff0c;提供了丰富的二手车信息&#xff0…

下载nacos 2.3 for arm64

客户组织安全测试&#xff0c;我们系统测出了好几个高危问题&#xff0c;其中大部分是关于nacos的。 原先的nacos版本太低了&#xff0c;是1.3的。现在&#xff08;2024.01&#xff09;已经是2.3了&#xff0c;应该装个新的。我们使用docker安装nacos&#xff0c;原本很简单的…

推荐几款便宜幻兽帕鲁游戏联机服务专用云服务器

随着互联网技术的发展&#xff0c;云服务器已经成为了许多游戏联机服务的首选。如果大家想要自行搭建幻兽帕鲁联机服务器&#xff0c;那么使用云服务器是一个很好的选择。下面&#xff0c;本文将推荐几款便宜幻兽帕鲁游戏联机服务专用云服务器。 幻兽帕鲁游戏对于服务器配置要求…

Windows 上面双网卡网络,配置为优先IPV4

多数网络游戏加速器是不支持IPV6的&#xff0c;即便支持IPV6也不好用&#xff0c;原因是IPV6在大陆并不是普及的状态&#xff0c;很多资源是没有的。 所以本文会教大家怎么让双IP栈的用户&#xff0c;怎么配置优先适用IPV4&#xff0c;并且IPV6也还可以用。 跟着我的步骤来&am…

互信息的简单理解

在介绍互信息之前&#xff0c;首先需要了解一下信息熵的概念&#xff1a;所谓信息熵&#xff0c;是指信息论中对一个随机变量不确定性的度量&#xff0c;对于随机变量x&#xff0c;信息熵的定义为&#xff1a; H ( x ) − ∑ x p ( x ) l o g p ( x ) H(x)-\sum_xp(x)logp(x) …

git安装步骤

安装环境&#xff1a;Windows10 64bit 下载 Git网址 &#xff1a;Git - Downloading Package 版本&#xff1a;Git-2.21.0-64-bit 第一步&#xff1a;双击下载后的Git-2.21.0-64-bit.exe&#xff0c;开始安装 安装开始 第二步&#xff1a;选择安装路径&#xff0c;点击[next]…

【云原生】Docker基于Dockerfile多级构建,实现缩小镜像体积

目录 一、基于上次的nginx的Dockerfile做多级构建 二、基于上次的php的Dockerfile修改做多级构建 三、基于上次的mysql的Dockerfile修改做多级构建 基于以上三个镜像构建 四、镜像体积是不是越小越好&#xff1f;为什么要缩减镜像体积&#xff1f; 五、缩小镜像体积的方法…

变相体罚的行为有哪些

你是否在无意中“伤害”了学生&#xff1f;每一位老师都如同辛勤的园丁&#xff0c;努力耕耘&#xff0c;期待花开。但在这个过程中&#xff0c;有些行为&#xff0c;虽不带皮肉之苦&#xff0c;却可能给学生的心灵留下难以愈合的创伤。今天&#xff0c;就让我们来谈谈这些隐蔽…

OpenHarmony—TypeScript到ArkTS约束说明

对象的属性名必须是合法的标识符 规则&#xff1a;arkts-identifiers-as-prop-names 级别&#xff1a;错误 在ArkTS中&#xff0c;对象的属性名不能为数字或字符串。通过属性名访问类的属性&#xff0c;通过数值索引访问数组元素。 TypeScript var x { name: x, 2: 3 };c…