当前位置: 首页 > news >正文

c++ unordered_map的用法

std::unordered_map 是 C++ 标准库中的一个容器,用于存储键值对(key-value pairs)。它提供了基于哈希表的实现,可以在常数时间内进行大部分插入、删除和查找操作。以下是关于 std::unordered_map 的用法,包括基本操作和示例代码。

1. 头文件

在使用 std::unordered_map 之前,需要包含相应的头文件:

#include <unordered_map>

2. 定义和初始化

可以使用以下方式定义和初始化 std::unordered_map

std::unordered_map<int, std::string> myMap; // 键为 int,值为 std::string

也可以使用初始化列表

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

3. 基本操作

a. 插入元素

有几种方法可以插入元素:

myMap[4] = "four"; // 通过下标操作插入
myMap.insert({5, "five"}); // 使用 insert 方法
myMap.emplace(6, "six"); // 使用 emplace 直接构造对象
b. 查找元素

可以使用 find 方法或下标操作查找元素:

auto it = myMap.find(2); // 查找键为 2 的元素
if (it != myMap.end()) {std::cout << "Found: " << it->second << std::endl; // 输出对应的值
}std::string value = myMap[3]; // 直接访问,若键不存在则插入默认值
c. 删除元素

可以使用 erase 方法删除元素:

myMap.erase(2); // 删除键为 2 的元素
d. 遍历元素

可以使用范围 for 循环遍历 unordered_map

for (const auto& pair : myMap) {std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
e. 获取大小和检查是否为空

可以使用 size 和 empty 方法:

std::cout << "Size: " << myMap.size() << std::endl; // 获取元素个数
if (myMap.empty()) {std::cout << "The map is empty." << std::endl;
}

4. 示例代码

以下是一个完整的示例代码,演示了 std::unordered_map 的基本用法:

#include <iostream>
#include <unordered_map>
#include <string>int main() {// 定义一个 unordered_mapstd::unordered_map<int, std::string> myMap;// 插入元素myMap[1] = "one";myMap.insert({2, "two"});myMap.emplace(3, "three");// 查找元素auto it = myMap.find(2);if (it != myMap.end()) {std::cout << "Found: " << it->second << std::endl;}// 遍历元素for (const auto& pair : myMap) {std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;}// 删除元素myMap.erase(1);// 输出大小std::cout << "Size after deleting key 1: " << myMap.size() << std::endl;return 0;
}

5. 注意事项

  • 哈希函数std::unordered_map 使用哈希函数来管理键的存储。默认情况下,使用标准的哈希函数,但可以提供自定义哈希函数。

  • 迭代顺序:由于使用哈希表,std::unordered_map 中元素的迭代顺序是不确定的。

  • 内存使用std::unordered_map 可能会比 std::map 使用更多的内存,因为它需要存储额外的信息(如哈希表的桶)。

  • 异常安全:大多数操作在异常安全方面是强的,尤其是在插入和删除时。


http://www.mrgr.cn/news/18460.html

相关文章:

  • 问:关于内部类,知道这些就够了~
  • 算法打卡 Day25(二叉树)-修剪二叉搜索树 + 将有序数组转换为二叉搜索树 + 把二叉搜索树转换为累加树
  • 【Linux】Linux命令行大冒险:寻找、搜索与压缩的神奇之旅
  • 带你0到1之QT编程:二、一举击碎QT常用数据类型
  • 幂等的通用实现方案
  • 前端算法面试题1--栈、队列、链表、字典与哈希表
  • Golang | Leetcode Golang题解之第391题完美矩形
  • 【hot100篇-python刷题记录】【电话号码的字母组合】
  • 堆内存申请
  • 浏览器按F12进入开发者模式后频繁因为异常而暂停导致无法分析页面xpath
  • JVM:内存结构_02(堆,方法区)
  • 全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法
  • 第T3周:天气识别
  • Linux--实现简易shell
  • CUDA与TensorRT学习二:CUDA编程入门
  • 基于Python的机器学习系列(22):高斯混合模型(GMM)聚类的改进版
  • 项目管理(1)——项目管理认识
  • jQuery基础——Ajax
  • Windows 安装 MySQL8
  • 数据结构:(LeetCode144)二叉树的前序遍历