c++ map

在了解map之前,你或许需要先了解pair

map函数

c++ 中,<map> 是标准模板库(STL)的一部分,它提供了一种关联容器,用于存储键值对(key-value pairs),并且根据键(key)自动排序的容器。map不允许键重复,每个键在map中只能出现一次。map容器的每一个元素都是一个pair结构(pair<t1,t2>)的数据。

创建map

  1. 创建空map
1
std::map<int,std::string> myMap;

创建了一个空map,键的类型为int,值类型为string
2. 继承一个map

1
2
std::map<int, std::string> myMap1 = { {1, "one"}, {2, "two"} };
std::map<int, std::string> myMap2(myMap1); // 使用myMap1初始化myMap2,myMap2现在包含myMap1的所有元素

myMap2创建时,就包括了myMap1的全部内容。

常用函数

1
2
myMap.size()    //返回map的大小
myMap.empty() //检查map是否为空

map元素添加,修改与删除

添加元素

  1. pair方式添加
1
myMap.insert(std::pair<int,std::string>(3,"three"));
  1. make_pair 方式添加
1
myMap.insert(std::make_pair(4,"four"));
  1. 以数组的方式添加或修改
1
2
myMap[3] = "three";
myMap[4] = "four";

这种方法在键值已存在时更新对应的值,在键不存在时插入新的键值。

修改元素

  1. 数组下标操作符
  2. 使用find方法和迭代器
    首先使用find()函数查找键在map中的位置,若键值在map函数中存在,find()会返回键值在map函数中的迭代器,若键值在map中不存在,find()会返回end迭代器。

end迭代器并不指向map中的任何元素,而是作为一个标记,表示容器的末尾,即容器中最后一个元素之后的位置。这是一个通用的约定,用于标识范围的结束,而不仅仅是在 std::map 中。因此,当 find 方法返回 end 迭代器时,这意味着在 map 中没有找到具有指定键的元素。

1
2
3
4
5
6
7
8
9
auto it = mapStu.find(3);
if(it != mapStu.end()){
//键值存在,修改其对应值
it->second = "three";
}
else{
//键值不存在,插入新键值
mapStu[3] = "three";
}

删除操作

1
2
3
4
mapStu.clear(); //删所有
mapStu.erase(it);//删迭代器指定
mapStu.erase(beg, end);//删key区间,这里的beg与end为迭代器。
mapStu.erase(key1);//删key对应

指定键的排序顺序

std::map默认是按照键(key)的升序进行排序的。
在创建map时,你可以通过提供比较函数或仿函数来自定义map的排序规则。

1
2
3
4
std::map<int,std::string,std::greater<int>> myMap; 
//std::greater<int>就是一个降序的反函数
std::map<int,std::string,cmp> myMap;
//通过自定义的cmp()函数来对键值进行排序

pair结构

pair 通常用于将两个值组合成一个单一的实体,以便可以作为一个整体进行传递或返回。std::pair 的两个元素可以是任何类型,包括基本数据类型(如 int、double 等)或自定义类型(如类、结构体等)。这两个元素分别被称为 firstsecond

使用方法是先包含头文件:#include <utility>
定义和使用 std::pair:

1
2
3
std::pair<int, std::string> myPair;  
myPair.first = 10;
myPair.second = "Hello";

使用 make_pair 函数创建 std::pair对象:

1
std::pair<int, std::string> myPair = std::make_pair(10, "Hello");

c++ map
http://blog.ulna520.com/2024/07/23/c++ map/
Veröffentlicht am
July 23, 2024
Urheberrechtshinweis