【C++】std::map基本使用

文章目录

0x00 前言

文章中的文字可能存在语法错误以及标点错误,请谅解;

如果在文章中发现代码错误或其它问题请告知,感谢!

0x01 std::map简介

map是一种关联容器(有序键值对容器),由键值Key和映射值Value组合而成的元素,容器中的元素顺序按照键值的取值升序排列。

map中,键值Key是标识和排序的唯一标识元素,映射值Value存储着与键值Key相关联的内容数据,所以可以根据键来查找关联数据。另外,键KeyValue是不同的类型,可以用std::pair组合KeyValue两种类型。

map 通常实现为红黑树。

map中的映射值Value可以通过键值Key和括号操作符(operator[] )访问。

map容器定义在#include <map>头文件中,定义如下:

template<
    class Key,
    class T,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<std::pair<const Key, T> >
> class map;

参数模板:

Key:键的类型。map中的每个元素都由其键值唯一标识。别名为成员类型map::key_type

T:映射值的类型。map中的每个元素都将一些数据存储为其映射值。别名为成员类型map::mapped_type

Compare:一个二进制谓词,它接受两个键值作为参数并返回一个bool值。在表达式 comp(a, b) 中,compCompare类型的对象,ab是键值,如果a被认为在b之前,则表达式comp(a, b)应该返回truemap对象使用这个表达式来确定容器中元素的顺序以及两个元素的键是否相等。Compare可以是函数指针或函数对象,默认为 less<T>,其返回与使用小于操作符(a<b)相同的结果。别名为成员类型map::key_compare

Alloc:分配器对象的类型,用于定义存储分配模型。默认情况下,使用allocator类模板,该模板定义最简单的内存分配模型,并且与值无关。别名为成员类型map::allocator_type

0x02 std::map基本使用举例

#include <iostream>
#include <assert.h>
#include <map>
using namespace std;

int main(void) {
	
	//初始化
	std::map<int, string> map1;
	std::map <int, std::string> map2 =   
	{
		{1,"AA"},
		{2,"BB"},
		{3,"CC"},
	};
	
	//插入
	// 如果已经存在键值,则会作赋值修改操作,如果没有则插入
	map2[3] = "CC2";
	map2[4] = "DD";
	//通过insert插入
	map2.insert(std::pair<int, std::string>(5, "EE"));

	//取值
	std::cout << map2.at(3).c_str() << std::endl;//map2[3]存在,不会报错
	//Map中元素取值主要有at和[]两种操作,at会作下标检查,而[]不会。
	//std::cout<< map2.at(6).c_str()<< std::endl;//使用at会进行关键字检查,因为没有6因此报错
	std::cout << map2[7].c_str() << std::endl;//键值中没有关键字7,但使用[]取值会导致插入,因此不会报错,但打印结果为空
	
	auto iter = map2.find(3);
	if(iter == map2.end()) 
	{
	   assert(false);  //若没有该键值则会返回end
	   return -1;
	}
	auto value = iter->second;  //second返回iter的value

	//遍历
	for(auto item =map2.begin();item!=map2.end();item++)
	{
	     auto value= item->second;
	     if(value == "CC2")
	     {
	        std::cout << "find!" << std::endl;
	     }
	}
	return 0;
}


运行结果:

CC2

find!

以上。

参考文档:
1.https://www.apiref.com/cpp-zh/cpp/container/map.html
2.https://blog.csdn.net/wcc27857285/article/details/78289175

上一篇:uiautomator2简单使用记录。


下一篇:Java中"="的用法