【C++STL】一篇总结std::map

目录

1、map概述

1.1map简介

1.2map初始化

2、map基本操作

2.1map添加元素

2.2map读取元素( find(), at() )

2.3删除元素

3、map高级操作

3.1遍历map

3.2使用lower_bound和upper_bound

3.3equal_range

 4、内部函数汇总

5、写在最后


1、map概述

1.1map简介

std::map 是C++ STL中的一个关联容器,其中的元素是成对出现的,称为键(key)和值(value)。键用于索引,而值则是与键相关联的数据。std::map保证所有的键都是唯一的,并且按照键的顺序自动排序。map可以被视为一个动态的、有序的、唯一键的数组。

1.2map初始化

(1)默认初始化

std::map<int, std::string> myMap;

(2)指定大小初始化

std::map<int, std::string> myMap(10); // 10是预留空间的大小,不是元素数量

(3)初始化列表

std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}};

(4)复制初始化

std::map<int, std::string> anotherMap = myMap;

(5)范围初始化

std::vector<std::pair<int, std::string>> pairs = {{1, "one"}, {2, "two"}};
std::map<int, std::string> myMap(pairs.begin(), pairs.end());
  •  关于std::pair补充:

在C++中,std::pair是一个模板类,用于表示一对值的组合,通常用于存储两个相关联但可能不同类型的数据。std::pair广泛用于STL容器中,如std::mapstd::multimap,这些容器默认以std::pair作为存储元素的类型。

2、map基本操作

2.1map添加元素

  • 使用 insert() 方法添加单个元素:
std::map<int, std::string> myMap;
myMap.insert(std::make_pair(3, "three"));
  • 使用 operator[] 添加并获取引用:
myMap[4] = "four";

2.2map读取元素( find(), at() )

  • 下标访问:
std::string value = myMap[1];
  • 迭代器访问:
std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}};

// find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
auto it = myMap.find(1);
if (it != myMap.end()) {
    std::string value = it->second; // 获取键为1的值
}
  • 使用 at() 成员函数(C++17 引入):

std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}};

// 使用at()方法直接通过键访问值
if (myMap.count(1) > 0) {
    std::string value = myMap.at(1); // 获取键为1的值
}

2.3删除元素

  • 删除特定键的元素:
int n = myMap.erase(2);//删除成功返回1,否则返回0
  • 删除迭代器指向的元素:
auto it = myMap.find(3);
if (it != myMap.end()) {
    myMap.erase(it);
}
  • 删除范围内元素:
myMap.erase(myMap.begin() + i, myMap.end());
  • 清空map:
myMap.clear();

3、map高级操作

3.1遍历map

//基于范围的for循环
for (const auto& pair : myMap) {
    std::cout << pair.first << " : " << pair.second << std::endl;
}

3.2使用lower_bound和upper_bound

  • lower_bound() 返回指向不小于给定键的最低元素的迭代器:
auto it = myMap.lower_bound(2);
  • upper_bound() 返回指向不大于给定键的最高元素的迭代器:
auto it = myMap.upper_bound(2);

3.3equal_range

std::map::equal_range函数返回一个std::pair,其中包含两个迭代器:

  • first:指向区间的开始,即指向不小于给定键的最低元素的迭代器。
  • second:指向区间的结束,即指向大于给定键的最高元素的迭代器的下一个位置。

std::map中,因为所有的元素都是唯一的,所以equal_range实际上会返回一个包含单个元素的区间,如果给定的键存在于容器中的话。

std::pair<int, std::string> range = myMap.equal_range(3);

 4、内部函数汇总

std::map提供了一系列的成员函数来操作容器中的元素:

  • size(): 返回容器中的元素数量。
  • empty(): 检查容器是否为空。
  • clear(): 移除容器中的所有元素。
  • insert(): 向容器中插入元素。
  • erase(): 从容器中删除元素。
  • find(): 查找具有特定键的元素。
  • count(): 返回具有特定键的元素数量(由于键的唯一性,结果总是0或1)。
  • lower_bound(): 返回指向不小于给定键的最低元素的迭代器。
  • upper_bound(): 返回指向不大于给定键的最高元素的迭代器。
  • equal_range(): 返回一个范围,包含与给定键相等的所有元素(在map中总是一对迭代器)
  • value_comp() :返回比较容器中元素的函数对象,用来比较两个元素是否相等。

5、写在最后

 std::map 是一个功能强大的容器,适用于需要有序、唯一键值对的场景。通过掌握其基本操作和高级功能,可以有效地管理数据集合。在实际编程中,合理利用map可以提高代码的效率和可读性。


才疏学浅,然孜孜不倦。

欢迎大家批评指正 !

版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 

  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值