C++示例:学习C++标准库std::map关联容器的使用

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】-

#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。

喜欢本文章,记得点赞、分享、关注哦~

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天恩软件工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值