首页 > 编程语言 >C++示例:学习C++标准库,std::unordered_map无序关联容器的使用

C++示例:学习C++标准库,std::unordered_map无序关联容器的使用

时间:2024-03-16 13:30:56浏览次数:26  
标签:std map 示例 元素 ages iter C++ user

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

相关文章

  • 滴水逆向笔记系列-c++总结2-36.权限控制-37.虚函数-38.多态_绑定
    第三十六课c++3权限控制1.定义和实现分开写2.private和publicprivate权限说明私有变量在类外是无法访问的,只有在类内或者使用类内函数访问类内函数访问3.private真的不能访问吗反汇编看看t对象在初始化public和private成员时都是一视同仁的,在底层还是没区别,都是编......
  • 滴水逆向笔记系列-c++总结3-39.模板-40.引用_友元_运算符重载
    第三十八课c++6模板1.冒泡排序和折半查找voidSort(int*arr,intnLength) { inti; intk; for(i=0;i<nLength-1;i++) { for(k=0;k<nLength-1-i;k++) { if(arr[k]>arr[k+1]) { inttemp=arr[k]; a......
  • 滴水逆向笔记系列-c++总结4-41.new-delete-vector-42.链表
    第四十课c++8new-delete-vector1.内存空间复习在类外函数外的变量就是全局变量,程序一编译地址就已经确定了的临时数据,参数和局部变量就是在堆栈里而使用malloc函数动态申请的则是在堆里2.跟踪调试反汇编函数我们调用malloc函数申请内存,但是不是malloc一个函数完成整个......
  • C++性能分析工具
    gprof:这是一个GNU的性能分析工具,主要用于分析程序的函数调用关系,以及每个函数的运行时间等。Valgrind:这是一个用于内存调试、内存泄漏检测以及性能分析的开源工具集。其中,Valgrind的Callgrind工具可以收集程序运行时的函数调用信息,用于性能分析。perf:这是Linux下的一个性能分析......
  • SQLiteC/C++接口详细介绍-sqlite3类(一)
    快速跳转文章列表:SQLite—系列文章目录  上一篇:SQLiteC/C++接口简介 下一篇:SQLiteC/C++接口详细介绍(二) 引言:SQLiteC/C++数据库接口是一个流行的SQLite库使用形式,它允许开发者在C和C++代码中嵌入SQLite基本功能的解决方案。通过SQLiteC/C++数据库接口,开发者可以......
  • 【C++函数速查】lower_bound和upper_bound使用方法详细解读
    文章目录1)概述2)函数使用3)案例代码1)概述lower_......
  • 【C++算法模板】图论-拓扑排序,超详细注释带例题
    文章目录0)概述1)Kahn算法1:数据结构2:建图3:Kanh算法2)DFS染色1:数据结构2:建图3:DFS3)算法对比【例题】洛谷B3644推荐视频链接:D01拓扑排序0)概述给定一张有向无环图,排出所有顶点的一个序列A......
  • C++函数调用优化
    C++函数调用优化施磊老师网课笔记截图1、用临时对象拷贝构造一个新对象的时候,编译器会对其优化,直接用生成临时对象的方法构造新对象;......
  • C++ Function Templates (函数模板)
    C++FunctionTemplates[函数模板]1.TemplatesandGenericProgramming(模板与泛型编程)2.DefiningaFunctionTemplates(定义函数模板)2.1.InstantiatingaFunctionTemplate(实例化函数模板)2.2.TemplateTypeParameters(模板类型参数)2.3.Non......
  • MongoTemplate的CRUD的操作示例:
    importorg.springframework.data.mongodb.core.MongoTemplate;importorg.springframework.data.mongodb.core.query.Criteria;importorg.springframework.data.mongodb.core.query.Query;importorg.springframework.data.mongodb.core.query.Update;importorg.spring......