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

C++ std::unordered_map

std::unordered_map 概述

std::unordered_map 是 C++ 标准模板库(STL)中的一个关联容器,基于哈希表实现。它存储键值对,允许通过键快速查找值,平均时间复杂度为 O(1)。

主要特性

  • 唯一键:每个键在容器中唯一。
  • 无序存储:元素不以任何特定顺序存储。
  • 哈希函数:通过哈希函数将键映射到桶(buckets)。
  • 动态调整:当负载因子(load factor)超过阈值时,自动重新哈希。

基本用法

包含头文件
#include <unordered_map>

声明和初始化
std::unordered_map<std::string, int> umap; // 空 unordered_map
std::unordered_map<std::string, int> umap = {{"apple", 1}, {"banana", 2}}; // 初始化列表

插入元素
umap.insert({"orange", 3}); // 使用 insert
umap["grape"] = 4; // 使用 operator[]

访问元素
int value = umap["apple"]; // 通过键访问,若键不存在会插入默认值
auto it = umap.find("banana"); // 使用 find 避免自动插入
if (it != umap.end()) {value = it->second;
}

删除元素
umap.erase("apple"); // 通过键删除
auto it = umap.find("banana");
if (it != umap.end()) {umap.erase(it); // 通过迭代器删除
}

遍历元素
for (const auto& pair : umap) {std::cout << pair.first << ": " << pair.second << std::endl;
}

常用成员函数

  • size():返回元素数量。
  • empty():检查是否为空。
  • clear():清空容器。
  • count(key):返回键的出现次数(0 或 1)。
  • bucket_count():返回桶的数量。
  • load_factor():返回当前负载因子。

性能与优化

  • 哈希函数:自定义类型需提供哈希函数或特化 std::hash
  • 负载因子:通过 max_load_factor(float) 调整阈值,影响重新哈希的频率。
  • 预分配:使用 reserve(size_t) 预分配桶以减少重新哈希次数。

示例代码

#include <iostream>
#include <unordered_map>
#include <string>int main() {std::unordered_map<std::string, int> umap = {{"apple", 1}, {"banana", 2}};umap["orange"] = 3;for (const auto& pair : umap) {std::cout << pair.first << ": " << pair.second << std::endl;}if (umap.find("apple") != umap.end()) {std::cout << "Found apple!" << std::endl;}return 0;
}

注意事项

  • 键的唯一性:重复插入相同键会覆盖原有值。
  • 哈希冲突:性能依赖于哈希函数的质量。
  • 迭代器失效:重新哈希操作会使所有迭代器失效。
http://www.dtcms.com/a/554469.html

相关文章:

  • 【Python办公】压缩包智能提取工具:基于顺丰单号的精准文件提取解决方案(无需解压缩)
  • 沈阳市建设工程信息网站石家庄 外贸网站建设公司排名
  • Redis 持久化方式
  • 手机网站空间申请医联媒体网站建设
  • ubuntu查看进程并杀死
  • 网站后台管理员做链接基础设施建设网站
  • 国家局公司转让全流程攻略
  • 网站开发注意的事项优化企业网站标题
  • 二手网站模板广州番禺区网站建设
  • 建设公司网站模板下载wordpress添加一个tag页面
  • 做 视频在线观看网站制作网站搭建网站项目怎么样
  • 网站服务器端口号是什么北京做网站制作的公司哪家好
  • qq靓号申请免费网站网上电商平台怎么注册
  • mysql初修1
  • Maven 4:20年老工具的重生之路
  • 网站开发佛山WordPress用Aplayer
  • U-net 系列算法知识解读
  • 图片类网站 怎么做优化太原站扩建后的规模
  • Rust开发之使用anyhow与thiserror简化错误处理
  • LVGL的介绍
  • 免费网站建设怎样jsp网站架构
  • UVa 10599 Robots(II)
  • 潍坊建设银行招聘网站郑州网站建设规划
  • 电子宠物游戏机ESD整改案例-深圳阿赛姆
  • Java拆分及合并pdf文件
  • 免费网站收录学服装设计有前途吗
  • 手机怎么建立网站瑞安微信网站
  • 网站建设多少钱一个平台网站开发建设哪家好
  • 猜数字游戏
  • html5 手机网站 图标ui是什么意思