01 std::unordered_map介绍
std::unordered_map是C++标准库中的一种无序关联容器模板类,它提供了一种将键映射到值的方法。它的底层基于哈希表实现,内容是无序的,可以在平均情况下在 O(1) 的时间复杂度内完成插入、查找和删除操作。
值得注意的是,哈希表可能存在冲突,即不同的键值经过哈希函数计算后可能得到相同的结果(多个键通过计算映射到同一个位置)。
02 定义
以下示例定义一个用于存储用户信息的关联容器对象;其中键是string是字符串类型(用户名称),值是int类型(用户年龄)。
// 包含头文件。
#include <string>
#include <unordered_map>
// 定义容器对象。
std::unordered_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({"user1", 25});
04 查找元素
// 查找元素。
auto iter = map_user_ages.find("user1");
if (map_user_ages.end() != iter)
{
// 找到元素。
int age = iter->second;
std::cout << "find 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 删除元素
-
删除开头元素:
利用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 = 135;
}
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 附录:完整源码
关注公众号下载本示例完整源码(05_std_unordered_map_example.zip)。
-【End】-
#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。
喜欢本文章,记得点赞、分享、关注哦~
标签:std,map,示例,元素,ages,iter,C++,user From: https://blog.csdn.net/yanghz/article/details/135491244