STL库之map映射基础知识

简介: STL库之map映射基础知识

前言:

映射是指两个集合之间的元素相互对应关系。通俗地说,就是一个元素对应另外一元素。


image.png

我们称其中的姓名集合为关键字集合(key),班级集合为值集合(value)

注意一个key不能对应多个value,这一点和函数法则一样!

在C++中我们常用的映射是map


一、构造一个映射

在C++中,我们构造一个map的语句是:map m;这样我们定义了一个名为m的从T1类型到T2类型的映射。初始的时候m是空映射比如map m构造了一个字符串到证书的映射,这样我们可以把一个字符串和一个整数关联起来。


二、插入一个映射(比较特殊)

通过insert()函数向集合中插入一个新的映射,参数是一个pair

首先跟其他数据结构类似,都是需要映射名作为引线,但insert()里面还需要参数!

pair是一个标准库类型,定义在头文件中

insert()里面的参数是make_pair(,)


image.png

值得注意:如果插入的key之前已经存在了,将不会用插入的新的value替代原来的value,也就是这次插入是无效的!


三、访问映射

在C++中访问映射和数组一样,直接用【】就能访问。比如a["Tom"]就可以获取Tom的班级。而这里有一个比较神奇的地方,如果没有对“Tom”做过映射的话,此时你访问a["Tom"],系统将会自动为“Tom”生成一个映射,其value为对应类型的默认值(比如int的默认值就是0,string默认值是空字符串)。

并且我们可以之后再给映射赋予新的值,你如a["Tom"]=3,这样为我们提供了另一种方便的插入手段。实际上我们常常通过下标访问的方式插入映射,而不是通过insert插入一个make_pair来实现


image.png


四、判断关键字是否存在

count()函数判断,若存在就返回1,不存在返回0


五、遍历映射

map的迭代器的定义和set差不多,map::iterator it就定义了一个迭代器,其中T1,T2分别是key和value的类型。c++通过迭代器可以访问集合中的每一个元素。这里的迭代器指向的元素是一个pair,有first和second两个成员变量,分别代表一个映射的key和value

我们用->运算符来获取值。it->first和(*it).first的效果一样,就是获取迭代器it指向的pair里first成员的值

并且按照first进行排序!

image.png

#include<string>
#include<map>
#include<utility>
using namespace std;//一定不要忘
int main()
{
  map<string, int> a;
  a.insert(make_pair("Tom", 1));
  a.insert(make_pair("Zone", 2));
  a.insert(make_pair("Mary",1));
  a["Tom"] = 4;//可以直接用数组下标的方式进行定义,更为方便
  for (map<string,int>::iterator it=a.begin();it!=a.end();it++)
  {
    cout << it->first << "->" << it->second << endl;//按照first已经排好序了
  }
  return 0;
}


六、清空函数为clear()

相关文章
|
5天前
|
Go
go语言中遍历映射(map)
go语言中遍历映射(map)
26 8
|
2月前
|
Go
Golang语言之映射(map)快速入门篇
这篇文章是关于Go语言中映射(map)的快速入门教程,涵盖了map的定义、创建方式、基本操作如增删改查、遍历、嵌套map的使用以及相关练习题。
39 5
|
4月前
|
存储 算法 C++
C++一分钟之-扁平化映射与unordered_map
【7月更文挑战第5天】C++的STL `unordered_map`是键值对的快速查找容器,基于哈希表。常见问题包括哈希函数选择、键类型限制、内存管理和迭代顺序不确定性。要避免问题,需优化哈希函数,确保自定义类型支持哈希和比较操作,合理管理内存,不依赖迭代顺序。提供的代码示例展示了如何为自定义类型定义哈希函数并操作`unordered_map`。正确使用能提升代码效率。
49 0
C++一分钟之-扁平化映射与unordered_map
|
4月前
|
存储 算法 C++
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
64 0
|
4月前
|
存储 C++ 索引
C++基础知识(八:STL标准库 Map和multimap )
C++ 标准模板库(STL)中的 map 容器是一种非常有用的关联容器,用于存储键值对(key-value pairs)。在 map 中,每个元素都由一个键和一个值组成,其中键是唯一的,而值则可以重复。
|
5月前
|
存储 算法 C++
C++一分钟之-扁平化映射与unordered_map
【6月更文挑战第30天】`std::unordered_map`在C++中提供O(1)平均操作的无序键值对存储。文章讨论了扁平化映射,用于简化多级数据结构,例如将配置文件展平。常见问题包括哈希碰撞、内存管理和键类型选择。示例展示了如何创建和访问扁平化配置映射。通过理解哈希冲突解决、内存管理和键要求,可以优化使用。
63 0
|
5月前
|
C++ 容器
C++ STL标准库 《map容器详解》
C++ STL标准库 《map容器详解》
44 0
|
5月前
|
存储 C++ 容器
C++ STL标准库 《map容器详解》
C++ STL标准库 《map容器详解》
76 0
|
2月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
2月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
下一篇
无影云桌面