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

C++ - 数据容器之 unordered_map(声明与初始化、插入元素、访问元素、遍历元素、删除元素、查找元素)

一、unordered_map

  • unordered_map 是 C++ STL 中的一个关联容器,它有如下特点
  1. unordered_map 存储键值对,使用哈希表实现

  2. unordered_map 的每个键在容器中只能出现一次

  3. unordered_map 的存储的键值对是无序的

  4. 平均情况下,查找、插入、删除都是 O(1) 时间复杂度


二、声明与初始化

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main()
{

	// 空 unordered_map
	unordered_map<string, int> map1;

	// 初始化 unordered_map
	unordered_map<string, int> map2 = {
		{"Alice", 25},
		{"Bob", 30} };

	return 0;
}

三、插入元素

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main()
{

	unordered_map<string, int> wordCount;

	// 使用 insert 方法
	wordCount.insert({ "apple", 3 });

	// 使用 operator[]
	wordCount["banana"] = 2;

	// 使用 emplace 方法
	wordCount.emplace("cherry", 5);

	return 0;
}

四、访问元素

1、演示
#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main()
{

	unordered_map<string, int> map = {
		{"Alice", 25},
		{"Bob", 30} };

	// 使用 operator[]
	cout << map["Alice"] << endl;
	cout << map["Bob"] << endl;

	// 使用 at 方法
	try {
		int result = map.at("Tom");
	}
	catch (out_of_range& e) {
		cout << "Key not found" << endl;
	}

	return 0;
}
# 输出结果

25
30
Key not found
2、注意事项
  • 使用 operator[] 访问,如果元素不存在,会创建新元素
#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main()
{

	unordered_map<string, int> map = {
		{"Alice", 25},
		{"Bob", 30} };


	cout << "unordered_map 大小为:" << map.size() << endl;
	cout << map["Tom"] << endl;
	cout << "unordered_map 大小为:" << map.size() << endl;

	return 0;
}
# 输出结果

unordered_map 大小为:2
0
unordered_map 大小为:3

五、遍历元素

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main()
{

	unordered_map<string, int> map = {
		{"Alice", 25},
		{"Bob", 30} };

	// 使用迭代器
	for (auto it = map.begin(); it != map.end(); it++) {
		cout << it->first << ": " << it->second << endl;
	}

	cout << "----------" << endl;

	// 使用范围 for 循环
	for (auto& it : map) {
		cout << it.first << ": " << it.second << endl;
	}

	return 0;
}
# 输出结果

Alice: 25
Bob: 30
----------
Alice: 25
Bob: 30

六、删除元素

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main()
{

    unordered_map<string, int> map = {
        {"Alice", 25},
        {"Bob", 30},
		{"Tom", 35} };

    cout << "unordered_map 大小为:" << map.size() << endl;

    // 通过键删除
	map.erase("Bob");
	cout << "erase 操作之后,unordered_map 大小为:" << map.size() << endl;

	// 全部删除
	map.clear();
	cout << "clear 操作之后,unordered_map 大小为:" << map.size() << endl;

    return 0;
}
# 输出结果

unordered_map 大小为:3
erase 操作之后,unordered_map 大小为:2
clear 操作之后,unordered_map 大小为:0

七、查找元素

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main()
{

    unordered_map<string, int> map = {
        {"Alice", 25},
        {"Bob", 30} };

    auto it1 = map.find("Alice");
    if (it1 != map.end())
    {
        cout << it1->second << endl;
    }
    else {
        cout << "Key not found" << endl;
    }

    auto it2 = map.find("Tom");
    if (it2 != map.end())
    {
        cout << it2->second << endl;
    }
    else {
        cout << "Key not found" << endl;
    }

    return 0;
}
# 输出结果

25
Key not found

文章转载自:
http://achates.gbfuy28.cn
http://autoist.gbfuy28.cn
http://alacrity.gbfuy28.cn
http://apheresis.gbfuy28.cn
http://acrasin.gbfuy28.cn
http://actually.gbfuy28.cn
http://bushing.gbfuy28.cn
http://apery.gbfuy28.cn
http://backache.gbfuy28.cn
http://alkaloid.gbfuy28.cn
http://bitt.gbfuy28.cn
http://calcimine.gbfuy28.cn
http://aspic.gbfuy28.cn
http://chirpy.gbfuy28.cn
http://bier.gbfuy28.cn
http://ammocolous.gbfuy28.cn
http://amino.gbfuy28.cn
http://carpetbag.gbfuy28.cn
http://chalkboard.gbfuy28.cn
http://cab.gbfuy28.cn
http://braillewriter.gbfuy28.cn
http://alm.gbfuy28.cn
http://bine.gbfuy28.cn
http://armet.gbfuy28.cn
http://chill.gbfuy28.cn
http://bombsight.gbfuy28.cn
http://accessional.gbfuy28.cn
http://chronicle.gbfuy28.cn
http://bibiolatrist.gbfuy28.cn
http://chromoplasm.gbfuy28.cn
http://www.dtcms.com/a/123964.html

相关文章:

  • 三相电为什么没零线也能通电
  • kali linux vmware 光标无法移出vmware,需要按ctrl + alt 才能移出光标
  • 【DB2】事务日志满/归档占用较大问题处理记录
  • 深入解析栈式虚拟机与反向波兰表示法
  • FacialExpressionDetection的conda虚拟环境搭建Window
  • 清华DeepSeek教程又双叒叕更新了!(共7份PDF下载)
  • DAPP实战篇:使用web3.js实现前端输入钱包地址查询该地址的USDT余额——前端篇
  • 算法竞赛中常用的数据处理库函数
  • 2025常用的ETL 产品推荐:助力企业激活数据价值
  • PyTorch Tensor维度变换实战:view/squeeze/expand/repeat全解析
  • SPI、UART、IIC(I²C) 通信协议的详细介绍及对比分析
  • NO.86十六届蓝桥杯备战|动态规划-01背包|采药|小A点菜|Cow Frisbee Team(C++)
  • KWDB创作者计划—KWDB:重新定义数据管理的边界
  • (51单片机)串口通讯(串口通讯教程)(串口接收发送教程)
  • 支付系统C扫B全链路压测方案
  • NLP高频面试题(三十九)——什么是大模型的涌现能力?
  • MATLAB在哪些特定领域比Python更有优势?
  • 华强北手表256G的,真实有多少?如何打开调试模式及root
  • GaussDB ECPG与Oracle Pro_C深度对比:嵌入式SQL开发者的迁移指南
  • SAP S/4HANA Public Cloud的实施特点、项目阶段、资源和工具
  • 特辣的海藻!16
  • uniapp实现H5页面麦克风权限获取与录音功能
  • 矩阵热图】】
  • UE5 RPC调用示例详解
  • 探索 UI 设计服务:提升用户体验的关键力量
  • Server-Sent Events一种允许服务器向客户端发送实时更新的 Web API
  • 利用大模型和聚类算法找出 Excel 文件中重复或相似度高的数据,并使用 FastAPI 进行封装的详细方案
  • 【学生管理系统升级版】
  • 河北邯郸进入万兆时代:实测下载破10Gbps 比千兆快10倍
  • debian系统中文输入法失效解决