C++ map 和 multimap 容器

【046】C++中map和multimap容器全面解析:深入学习,轻松掌握 在C++中,map和multimap容器是非常重要的数据结构,它们提供了一种键值对的映射关系,可以高效地组织和访问数据。map容器中的每个元素都包含一个键和一个值,而multimap容器允许键重复。这两种容器在实际项目中广泛应用,特别适合需要快速查找和插入元素的场景。其底层实现采用了红黑树等高效的数据结构,map和multimap容器在处理大量数据时具有良好的性能表现。它们也提供了丰富的操作方法和函数,可以轻松地对容器中的数据进行插入、删除、查找和遍历操作。 阅读详情

map/multimap的简介
map是标准的关联式容器,一个map里存储的元素是一个键值对序列,叫做(key,value)键值对。它提供基于key快速检索数据的能力。

  1. map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。
  2. map底层的具体实现是采用红黑树变体的平衡二叉树的数据结构。在插入操作、删除和检索操作上比vector快很多。
  3. map可以直接存取key所对应的value,支持[]操作符,如map[key]=value。
  4. 使用时必须包含头文件#include <map>

multimap与map的区别:
map支持唯一键值,每个键只能出现一次;而multimap中相同键可以出现多次。multimap不支持[]操作符。

map/multimap容器 和 set/multiset容器都是差不多的,只是map/mulitmap比他们多了一个键值!

如果不懂set/multiset容器的可以点下面链接:
https://blog.youkuaiyun.com/cpp_learner/article/details/104751672

当然,map/multimap容器也有仿函数,因为在之前的文章中,已经详细讲过了,所以这里就不在讲了,如果不懂的可以点下面链接去学习:
https://blog.youkuaiyun.com/cpp_learner/article/details/104730577


定义
	// 无参
	map<int, string> m1;
	map<int, int> m2;
	map<string, float> m3;
	map<char, string> m4;

	// 带参
	map<int, string> m5(m1.begin(), m1.end());	// 迭代器
	map<string, float> m6(m3);	// 调用拷贝构造函数
	map<char, string> m7 = m4;	// 调用了赋值构造函数

还可以用各种指针类型或自定义类型


插入

// 方式一 构造一个pair,然后插入,如果键存在,则插入失败
m1.insert(pair<int, string>(1, “张三”));

// 方式二 使用make_pair
m1.insert(make_pair(2, “李四”));

// 方式三 使用value_type,相当于pair<int, string>
m1.insert(map<int, string>::value_type(3, “王五”));

// 方式四 使用 [] 重载,如果键值对已经存在,则覆盖原值
m1[4] = “赵六”;
m1[4] = “韩七”;

注意:

  1. 方式一 至 方式三的返回值类型都是一样的,都是
    pair<iterator,bool> 类型

  2. 第四种方法非常直观,但碰到相同的键时会进行覆盖操作。比如插入key 为4的键值时,先在mapStu中查找主键为4的项,若不存在,则将一个键为4,值为默认初始化值的对组插入到mapStu中,然后再将值修改成“赵六”。若发现已存在4这个键,则修改这个键对应的value。

  3. string strName = mapStu[8]; //取值操作或插入操作

  4. 只有当mapStu存在8这个键时才是正确的取操作,否则会自动插入一个实例,键为8,值为默认构造时的初始化值。

下面测试代码 函数 test1 中会有详细案例


迭代器

// 返回容器中第一个数据的迭代器
m1.begin();

// 返回容器中最后一个数据之后的迭代器
m1.end();

// 返回容器中倒数第一个元素的迭代器
m1.rbegin();

// 返回容器中倒数最后一个元素的后面的迭代器
m1.rend();

// 使用迭代器方式输出容器里的值

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

排序

map 和 multimap 容器默认存储时是顺序存储的,即
map<int, string> m1; 相等于: map<int, string, less<int>> m1;

也可以使用greater定义一个容器,使其默认逆序存储,即
map<int, string, greater<int>> m2;

在此条链接中会有详细解析:
https://blog.youkuaiyun.com/cpp_learner/article/details/104730577

// 交换容器中的元素
m3.swap(m2);


// 返回容器中元素的个数
m1.size();

// 判断容器是否为空
m1.empty(); // 为空返回真,不为空返回假

//删除迭代器所指的元素,返回下一个元素的迭代器
m1.erase(m1.begin());

//删除区间[beg,end)的所有元素,返回下一个元素的迭代器
m1.erase(beg, end);

//删除容器中key为key的对组,返回删除的对组个数
m1.erase(8);

// 删除容器中所有的元素
m1.clear();


查找

map方式
// 查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回map.end();

/*---map---*/
// 查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回map.end();
map<int, string>::iterator it = m1.find(5);
if (it != m1.end()) {
	cout << "m1.find(5) = " << (*it).second << endl;
} else {
	cout << "没找到!!!" << endl;
}

multimap方式
// 查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回map.end();

/*---multimap---*/
// 查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回map.end();
multimap<int, string>::iterator mit = m2.find(111);
if (mit != m2.end()) {
	for (; mit != m2.end(); mit++) {
		if ((*mit).first == 111) {
			cout << "m2.find(111) = " << (*mit).second << endl;
		} else {
			break;
		}
	}
}

// 返回容器中键值为key的对组个数。对map来说,要么是0,要么是1;对multimap来说,值>=0
m1.count(222);

// 返回第一个 >= key 元素的迭代器
m1.lower_bound(2);

// 返回第一个 > key 元素的迭代器
m1.upper_bound(2);

//返回容器中key与keyElem相等的上下限的两个迭代器。上限是闭区间,下限是开区间,如[beg,end)
//m1.equal_range(keyElem);
m1.equal_range(7);

返回值是: pair<iterator, iterator> 类型

在下面测试代码函数 test7 中会有详细案例。


测试代码:

#include <map>
#include <iostream>
#include <Windows.h>
#include <string>

using namespace std;

// 定义
void test1(void) {
	// 无参
	map<int, string> m1;
	map<int, int> m2;
	map<string, float> m3;
	map<char, string> m4;

	m1.insert(pair<int, string>(1, "张三"));
	m1.insert(pair<int, string>(2, "李四"));

	// 带参
	map<int, string> m5(m1.begin(), m1.end());	// 迭代器
	map<string, float> m6(m3);	// 调用拷贝构造函数
	map<char, string> m7 = m4;	// 调用了赋值构造函数

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

// insert插入
void test2(void) {
	map<int, string> m1;

	// 方式一 构造一个pair,然后插入,如果键存在,则插入失败
	m1.insert(pair<int, string>(1, "张三"));

	// 方式二 使用make_pair
	m1.insert(make_pair(2, "李四"));

	// 方式三 使用value_type,相当于pair<int, string>
	m1.insert(map<int, string>::value_type(3, "王五"));

	// 方式四 使用 [] 重载,如果键值对已经存在,则覆盖原值
	m1[4] = "赵六";
	m1[4] = "韩七";

	m1[5] = m1[6];	// 应为两个都是新值,所以他们创建键后,值默认为空

	m1[7] = m1[4];	// 将键值为4里的值赋值给键值为7的值

	m1[0] = m1[8];	// 新键赋值给旧键,它两的值都为空

	


	// 方式一 至 方式三的返回值类型都是一样的
	pair<map<int, string>::iterator, bool> ret1 = m1.insert(pair<int, string>(9, "刘八"));
	pair<map<int, string>::iterator, bool> ret2 = m1.insert(make_pair(10, "杨九"));
	pair<map<int, string>::iterator, bool> ret3 = m1.insert(map<int, string>::value_type(11, "吴十"));
	if (ret1.second == true) {
		cout << "插入成功!value:" << (*(ret1.first)).second << endl;
	} else {
		cout << "插入失败!" << endl;
	}


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

// 迭代器
void test3(void) {
	map<int, int> m1;

	m1.begin();		// 返回容器中第一个数据的迭代器。
	m1.end();		// 返回容器中最后一个数据之后的迭代器。
	m1.rbegin();  // 返回容器中倒数第一个元素的迭代器。
	m1.rend();   // 返回容器中倒数最后一个元素的后面的迭代器。
}

// 排序
void test4(void) {
	map<int, string> m1;	// 默认是less顺序排序
	//map<int, string, less<int>> m1;

	m1.insert(pair<int, string>(1, "张三"));
	m1.insert(pair<int, string>(2, "李四"));
	m1.insert(pair<int, string>(3, "王五"));
	m1.insert(pair<int, string>(4, "赵六"));

	
	// 可以使用greater逆序排序
	map<int, string, greater<int>> m2;
	m2.insert(pair<int, string>(1, "韩七"));
	m2.insert(pair<int, string>(2, "刘八"));
	m2.insert(pair<int, string>(3, "杨九"));

	map<int, string, greater<int>> m3;

	// 交换容器中的元素
	m3.swap(m2);

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

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

// 大小
void test5(void) {
	map<int, string> m1;

	m1.insert(pair<int, string>(1, "张三"));
	m1.insert(pair<int, string>(2, "李四"));
	m1.insert(pair<int, string>(3, "王五"));
	m1.insert(pair<int, string>(4, "赵六"));

	// 返回容器中元素的个数
	m1.size();

	// 判断容器是否为空
	m1.empty();	// 为空返回真,不为空返回假


	if (!m1.empty()) {
		cout << "容器元素个数为:" << m1.size() << endl;

	} else {
		cout << "容器为空!" << endl;
	}
}

// 删除
void test6(void) {
	map<int, string> m1;

	m1.insert(pair<int, string>(1, "张三"));
	m1.insert(pair<int, string>(2, "李四"));
	m1.insert(pair<int, string>(3, "王五"));
	m1.insert(pair<int, string>(4, "赵六"));
	m1.insert(pair<int, string>(5, "韩七"));
	m1.insert(pair<int, string>(6, "刘八"));
	m1.insert(pair<int, string>(7, "杨九"));
	m1.insert(pair<int, string>(8, "吴十"));

	//删除迭代器所指的元素,返回下一个元素的迭代器
	m1.erase(m1.begin());	// 李四,王五,赵六,韩七,刘八,杨九,吴十


	map<int, string>::iterator beg = m1.begin();
	beg++;
	map<int, string>::iterator end = m1.begin();
	end++;
	end++;
	end++;

	//删除区间[beg,end)的所有元素,返回下一个元素的迭代器
	m1.erase(beg, end);	// 李四,韩七,刘八,杨九,吴十

	//删除容器中key为key的对组,返回删除的对组个数
	m1.erase(8);   // 李四,韩七,刘八,杨九


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

	// 删除容器中所有的元素
	m1.clear();
}

// 查找
void test7(void) {
	map<int, string> m1;
	multimap<int, string> m2;

	m1.insert(pair<int, string>(1, "张三"));
	m1.insert(pair<int, string>(2, "李四"));
	m1.insert(pair<int, string>(3, "王五"));
	m1.insert(pair<int, string>(4, "赵六"));
	m1.insert(pair<int, string>(5, "韩七"));
	m1.insert(pair<int, string>(6, "刘八"));
	m1.insert(pair<int, string>(7, "杨九"));
	m1.insert(pair<int, string>(8, "吴十"));

	m2.insert(pair<int, string>(111, "张三"));
	m2.insert(pair<int, string>(111, "李四"));
	m2.insert(pair<int, string>(222, "王五"));
	m2.insert(pair<int, string>(222, "赵六"));
	

	/*---map---*/
	// 查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回map.end();
	map<int, string>::iterator it = m1.find(5);
	if (it != m1.end()) {
		cout << "m1.find(5) = " << (*it).second << endl;
	} else {
		cout << "没找到!!!" << endl;
	}

	/*---multimap---*/
	// 查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回map.end();
	multimap<int, string>::iterator mit = m2.find(111);
	if (mit != m2.end()) {
		for (; mit != m2.end(); mit++) {
			if ((*mit).first == 111) {
				cout << "m2.find(111) = " << (*mit).second << endl;
			} else {
				break;
			}
		}
	}

	//返回容器中键值为key的对组个数。对map来说,要么是0,要么是1;对multimap来说,值>=0
	m1.count(222);   

	//返回第一个 >= key 元素的迭代器
	it = m1.lower_bound(2);  
	if (it != m1.end()) {
		cout << "找到啦!==> " << (*it).second << endl;
	} else {
		cout << "没找到!" << endl;
	}

	//  返回第一个 > key 元素的迭代器
	it = m1.upper_bound(2);
	if (it != m1.end()) {
		cout << "找到啦!==> " << (*it).second << endl;
	} else {
		cout << "没找到!" << endl;
	}

	//返回容器中key与keyElem相等的上下限的两个迭代器。上限是闭区间,下限是开区间,如[beg,end)
	//m1.equal_range(keyElem);
	pair<map<int, string>::iterator, map<int, string>::iterator> iit = m1.equal_range(7);
	
	// 第一个迭代器
	if (iit.first != m1.end()) {
		cout << "begin ==> " << (*iit.first).second << endl;
	} else {
		cout << "没找到!" << endl;
	}

	// 第二个迭代器
	if (iit.second != m1.end()) {
		cout << "end ==> " << (*iit.second).second << endl;
	}
	else {
		cout << "没找到!" << endl;
	}

}

int main(void) {
	//test1();

	//test2();

	//test3();

	//test4();

	//test5();

	//test6();

	//test7();

	system("pause");
	return 0;
}

总结:
STL容器中,所有容器的接口用法都是差不多的,所以说其实并不难,只要理解了一种,其他的容器用法都全会了。

【C++STL的map/ multimap容器 cpp】 -- 深入浅出STL容器map和multimap的使用方法 multimap内部采用的也是红黑树,它们之间的主要区别是multimap支持键值的重复性,所以查找元素的复杂度也是O(logn)。接着,我们定义了一个名为myMultiMap的multimap对象,它的键和值都是字符串类型。上面的代码中,我们首先定义了一个名为myMap的map对象,它的键是一个字符串类型,值是一个整型数。我们向这个map中添加了三组数据,然后使用迭代器访问了所有的元素,并输出了它们的姓名和年龄。其中,map和multimap都是非常有用的关联容器,在处理键值对的场景下非常实用。 阅读详情

相关推荐

C++STL的map/ multimap容器

3.9.1 map基本概念 简介: map中所有元素都是pair pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值) 所有元素都会根据元素的键值自动排序 本质: map/multimap属于关联式容器,底层结构是用二叉树实现。 优点: 可以根据key值快速找到value值 map和multimap区别: map不允许容器中有重复key值元素 multimap允许容器中有重复key值元素 3.9.2 map构造和赋值 功能描述: 对map容器进行构造和赋值操

希望我的博客,能帮上你解决学习中工作中所遇到的问题 349

c++中的map

c++提供的map容器,头文件#include,map的特点是存储的都是键值对,键具有唯一性。键值对之间是一一对应的关系。如:map color;那么键的类型是string,值是int.color[red]=1; 相当于一种特殊的数组,数据排序不用是int 。 Problem Description Contest time again! How excited it is to see

yzzbestcoder 343

行政数据分析大屏实战:用Tableau从Excel到看板的完整搭建流程(含数据连接与字段计算避坑)

本文详细介绍了如何利用Tableau从Excel数据源搭建行政数据分析大屏的完整流程,涵盖数据准备、连接技巧、计算字段优化、看板设计及动态交互部署。通过五阶工作流,帮助用户高效处理多源异构数据,实现业务洞察与可视化呈现,提升行政数据分析效率。

weixin_29696711的博客 336

集合(Map)

Map集合:一次添加一对元素。也称为双列集合,而Collection为单列集合。 特点: Map集合中存储的是键值对。 Map集合中必须保证key(键)的唯一性。 Map集合中key可以为null,value也可以为null。 Map集合中key和value都必须是引用数据类型。 Map存储机制:Map是基于数组和链表的数据结构进行存储数据。 常用方法: 1、添加: V put(...

Dimples. 461

Xilinx System Generator多速率系统(Multi-Rate Systems)的使用

在本实验练习中,您将学习在System Generator中如何使用多个时钟域有效地实现具有多个数据速率的设计。

白码王子小张的博客 1092

Transformer是什么?看完这篇你就醍醐灌顶

前言 由谷歌团队提出的预训练语言模型BERT近年来正在各大自然语言处理任务中屠榜(话说学者们也挺有意思的,模型名都强行凑个芝麻街的人物名,哈哈哈)。 BERT算法的最重要的部分便是Transformer的概念,它本质上是Transformer的编码器部分。 而Transformer是什么呢?transformer是永远的神,自从transformer使用了抛弃rnncnn的纯attention机制之后,各种基于transformer结构的预训练模型都如雨后春笋般雄起,而transformer中最重要就是使用

fs1341825137的博客 6万+

C++ map(不影响map结构)按照插入顺序排序

我用的是qt,但是这里用的方法qmap却不支持,挺郁闷的。 看到java有现成的linkedhashmap使用,更郁闷。 做项目的时候,从数据库搜索了几万条数据,需要对每条数据处理,然后把处理结果显示。开始用的qmap,map的键值对是地址-其他信息,很快捷方便。但是看显示结果的时候发现,qmap自动排序了,我显示的有时间,但是这里却把地址排序。所以我想实现按照时间排序。 一开始的思路是对qmap或map本身动手脚,但是各处搜索,发现几个思路。 1.重载map的构造函......

weixin_38431416的博客 7889

用人话讲明白线性回归LinearRegression

目录 什么是回归 一元线性回归 损失函数 最小二乘估计 小结 1. 什么是回归 当我们学习一门新课程、接触一个新专业时,总会对该领域的专有名词感到困惑,甚至看完解释仍难以理解其含义。在我们一起学习machine learning的过程中,我会尽量对相关名词用“人话”做一遍解释,以减少学习的“痛苦感”。 譬如今天要学的线性“回归”,这个回归(regression)和我们平时说的“回归祖国”的回...

化简可得 1万+

map容器的使用 逆序遍历map容器当中的数据

一:前言 这个逆序遍历是将map容器的迭代器进行了变化,reverse_iterator逆向遍历的迭代器 ,它需要 rbegin()和rend()方法指出反向遍历的 起始位置和终止位置。 二:上码演示 #include<bits/stdc++.h> using namespace std; int main(){ int N; map<double,double>m; map<double,double>:: reverse_iterator t; //rev

qq_48508278的博客 2562

Unreal5从入门到精通之如何实现移动端触屏滑动手势

随着移动设备的普及,越来越多的游戏和应用选择在移动平台上发布。Unreal Engine 5(UE5)作为一款强大的游戏引擎,提供了丰富的工具和功能,帮助开发者打造出色的移动体验。UE5不仅提升了图形质量,还大幅简化了开发流程,使得开发者能够更专注于游戏设计和用户体验。在移动游戏中,触屏滑动手势是用户与应用互动的主要方式之一。然而,许多开发者在实现这些功能时常常遇到困难。为了填补这一知识空白,本篇文章将详细介绍如何在UE5中实现移动端触屏滑动手势,帮助你从入门到精通,提升你的开发技能。

TxNet 1134

SAP_MM&FI模块-质保金标准解决方案详解

主要讲述了SAP系统质保金的标准实现方案,包含业务背景、后台配置、前台业务操作记录,以及关键点的AI解释;

风沙的博客 681

C++ map根据value进行排序以及根据key倒序

map有key和value 如果用map,默认是按key排序 用unordered_map则不排序 那么如何按照value进行排序呢: 一个很简单的做法就是用vector存map的key和value,因为sort方法只能对vector等进行排序,可以对sort施加约束: #include<iostream> #include<unordered_map> #include<vector> #include<algorithm> #include&l

a1486843516的博客 2460

嵌入式面经篇八——进程&线程

记录一些招聘公司在招聘嵌入式软件岗位时的一些问题,此文为第八篇。进程上文:是指进程由用户态切换到内核态时需要保存用户态时CPU寄存器中的值,进程状态以及堆栈上的内容。即保存当前进程的状态,以便再次执行该进程时,能够恢复切换时的状态,继续执行。进程下文:是指切换到内核态后执行的程序,即进程运行在内核空间的部分。中断上文:硬件通过中断触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。

明天你好的博客 1854

【C++容器】map和multimap使用全览

本文介绍了C++ STL中的map和multimap容器,它们是基于红黑树实现的关联容器,用于存储键值对。主要区别在于map要求键唯一,而multimap允许键重复。文章详细讲解了map的特性、构造函数、元素访问、迭代器、修改器和查找操作,并提供了示例代码展示其用法,包括插入、修改、删除和安全访问元素等操作。map作为有序字典,适合需要快速查找和修改键值对的场景。

obroccolio的博客 2132

蓝牙协议栈详解(3)——BTstack

BTstack是一个轻量级蓝牙协议栈,支持经典蓝牙(BR/EDR)和低功耗蓝牙(BLE)。它采用事件驱动模型,可运行在MCU/CPU上,通过HCI接口与蓝牙控制器通信。协议栈包含完整的蓝牙协议层支持,如L2CAP、RFCOMM、ATT/GATT等,并提供丰富的示例代码。 主要特点包括模块化设计、开源授权、支持多种HCI传输方式(UART/USB)和操作系统适配。开发时需要关注事件驱动编程模型、内存配置优化、HCI传输稳定性等问题。典型应用场景包括SPP串口通信、BLE外设开发等。 使用建议从最小示例开始,逐

嵌入式软硬件叶玄 291

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++ map、multimap、unordered_map、unordered_multimap容器

在C++中,、、 和 是常用的关联容器,用于存储键值对(key-value pairs)。它们各自的实现原理、使用场景、常规操作和注意事项各不相同,下面将详细讲解每个容器。#include <iostream> #include <map>int main() { std::map<int, std::string> myMap; // 插入元素 myMap.insert({1, "one"}); myMap[2] = "two"; // [] 运算符可以直接插入或修改值

qq_50373827的博客 1612

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

深入探索C++ STL中的map/multimap容器:从基础到实践

在C++标准库中,map 和 multimap 是两种非常重要的关联容器。它们提供了一种方式,使我们可以根据键值来存储、查找、删除和遍历元素。虽然 map 和 multimap 在功能上有许多相似之处,但它们之间也存在关键的区别。本文将详细探讨这两种容器的特点、使用方法和适用场景。

2301_80211119的博客 2570

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++ map/multimap容器超详解

C++ map/multimap容器详解pair对组map的基本概念map的构造和赋值map的大小和交换map的插入和删除map的查找和统计map容器的排序规则 pair对组 在学习map之前我们先了解一下pair对组,因为map中的基本元素就是对组pair。 pair是将2个数据组合成一组数据,当一个函数需要返回2个数据的时候,就可以选择pair pair的实现是一个结构体,主要的两个成员变量first和second,分别存储两个数据 pair的创建: pair<T1,T2>

qq_52324409的博客 2916

C++ STL map/multimap容器详解

C++ STL map/multimap容器详解

嵌入式小程同学的博客 1154

C++的map / multimap容器

C++的map容器如何使用

Jacker优快云的博客 1033

C++ map容器和multimap容器(STL map容器)

1. 关联容器和map容器概述 map容器是关联容器的一种。在关联容器中,对象的位置取决于和它关联的键的值。键可以是基本类型也可以是类类型。关联容器是与非关联容器(顺序容器)相对应的,顺序容器中元素的位置不依赖于元素的值,而是和该元素加入容器时的位置有关。关联容器的类型有下面八种: 按关键字有序保存元素 map 关联数组;保存关键字-值对 set 关键字即值,只保存关键字的容器 multimap 关键字可以重复出现的map multiset 关键字可.

$firecat利白的代码足迹$ 1097

C++ map容器和multimap容器(STL map容器)_c++ unordered_mutilmap

map容器是关联容器的一种。在关联容器中,对象的位置取决于和它关联的键的值。键可以是基本类型也可以是类类型。关联容器是与非关联容器(顺序容器)相对应的,顺序容器中元素的位置不依赖于元素的值,而是和该元素加入容器时的位置有关。按关键字有序保存元素map 关联数组;保存关键字-值对set 关键字即值,只保存关键字的容器multimap 关键字可以重复出现的mapmultiset 关键字可以重复出现的set无序关联容器unordered_map 用哈希函数组织的map,无序。

2401_84616585的博客 697

【C++ 十八】C++ map/ multimap容器

本文包含map基本概念、map构造和赋值、map大小和交换、map插入和删除、map查找和统计、map容器排序。

qq_45138120的博客 1562

C++ map multimap容器超详解_c++ multimap区别

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。删除迭代器pop所指的元素,返回下一个元素的迭代器。

2401_84616533的博客 1108

C++STL——map/multimap容器详解

map的特性是,所有元素都会根据元素的键值自动排序。map所有的元素都是pair,同时拥有实值和键值,pair的第一元素被视为键值,第二元素被视为实值,map不允许两个元素有相同的键值。map和multimap都是以红黑树为底层实现机制。 map容器的迭代器: map提供了双向迭代器。 我们可以通过map的迭代器改变map的键值吗?答案是不行,因为map的键值关系到map元素的排列规则,任意改变map键值将会严重破坏map组织。如果想要修改元素的实值,那么是可以的。

阿标de杂货铺 1798

C++ set、map、multiset和multimap容器

本文将重点探几种种基于树形结构的关联式容器set、multiset、map和multimap。这这四种容器在C++标准库中占据着重要地位,它们不仅提供了强大的数据存储和检索功能,还各自具备独特的特性,如自动排序、键值对的存储以及多键值的支持。接下来,我们将详细介绍他们的特性和用法,帮助读者更好地理解和运用树形结构关联式容器。集合是按照特定顺序存储唯一元素的容器。在set中,元素的值也标识它(值本身就是键,类型为T),并且每个值必须是唯一的。set中元素的值在容器中。

2301_79171011的博客 1197
上一篇: C++ set&mulitset 与 仿函数(函数对象)
下一篇: C++ 入门算法,你必须懂的“顺序表”
cpp_learners
博客等级 码龄7年 1526粉丝 274原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp_learners

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值