01 std::map介绍
std::map是C++标准库中的一个关联容器模板类,它存储的元素是一个键值对,其中每个键是唯一的。std::map的内部按照键的顺序进行排序。你可以通过键快速查找和访问对应的值。
std::map的底层通常基于红黑树(Red-Black Tree)实现,红黑树的平衡性质可以确保查找、插入和删除操作的时间复杂度接近 O(log n)。
02 初始定义
以下示例定义一个用于存储用户信息的关联容器对象;其中键是string是字符串类型(用户名称),值是int类型(用户年龄)。
// 包含头文件。
#include <string>
#include <map>
// 定义容器对象。
std::map<std::string, int> map_user_ages;
03 添加元素
// 添加元素。
map_user_ages.insert(std::pair<std::string, int>("user1", 25));
// C++11及以上版本可以使用下面代码来添加元素。
map_user_ages.insert({"user2", 30});
04 查找元素
// 查找元素。
auto iter = map_user_ages.find("user1");
if (map_user_ages.end() != iter)
{
// 找到元素。
int age = iter->second;
std::cout << "user1 age = " << age << std::endl;
}
else
{
// 找不到元素。
}
05 遍历元素
#include <iostream>
// 遍历元素。
for (const auto& it : map_user_ages)
{
std::string name = it.first;
int age = it.second;
std::cout << name << " age = " << age << std::endl;
}
06 删除元素
-
删除指定元素:
// 删除指定元素示例。
myUserAgeMap.erase("user1");
-
删除开头元素:
利用begin()删除开头元素。
// 删除容器开头元素示例。
map_user_ages.erase(map_user_ages.begin());
-
通过迭代器删除元素:
// 查找元素。
auto iter = map_user_ages.find("user1");
if (map_user_ages.end() != iter)
{
// 找到元素并删除。
map_user_ages.erase(iter);
}
07 访问和修改元素
-
at函数访问和修改元素:
at(KEY)函数用于访问容器,KEY键的值,如果KEY键元素不存在,函数会抛出异常。
// 访问元素。
int age = map_user_ages.at("user1");
// 修改元素值。
map_user_ages.at("user1") = 20;
-
通过迭代器修改元素值:
通过迭代器的方式可以判断元素是否存在,不存在抛出异常风险。
// 查找元素。
auto iter = map_user_ages.find("user1");
if (map_user_ages.end() != iter)
{
// 找到元素,修改元素值。
iter->second = 35;
}
08 通过count判断元素是否存在
count函数用于计数键在容器中出现的次数。如果容器存在该键,则返回1;否则,返回0。
// 计数键在容器出现次数。
size_t count = map_user_ages.count("user1");
// 输出: The count of 'user1' is: 1
std::cout << "The count of 'user1' is: " << count << std::endl;
09 附录:完整源码
关注公众号下载本示例完整源码(10_std_map_example.zip)。
-【End】-
#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。
喜欢本文章,记得点赞、分享、关注哦~