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

【编程语言】在C++中使用map与unordered_map

1. 简介

在C++中,map是一种键值对(key-value pair)数据结构,用于将每个“键”关联到一个特定的“值”。这种结构极大地提高了数据的查找、更新和管理效率,是一个有序的、基于红黑树实现的关联容器。对于初学者而言,理解并掌握map的使用可以帮助更好地组织和处理数据。

在本文中,我们将详细介绍如何使用C++中的map,并对其常见用法进行说明。同时,我们还会讨论unordered_map的使用场景及其与map的不同。

2. map的基本概念和用法

map中,每个键是唯一的,这意味着不能存在重复的键。此外,由于map是基于有序结构实现的,因此它会按键的顺序自动排列元素。可以理解为map是一个集合,其中的元素是键值对。在C++中,我们可以使用std::map来定义一个映射关系。

示例:创建一个map并插入数据

#include <iostream>
#include <map>
using namespace std;int main() {map<int, string> studentID;studentID[101] = "Alice";studentID[102] = "Bob";studentID[103] = "Carol";for (const auto &pair : studentID) {cout << "ID: " << pair.first << ", Name: " << pair.second << endl;}return 0;
}

在上面的代码中,我们创建了一个以整数作为键、以字符串作为值的map。可以看到,通过使用索引[],我们可以直接为指定的键赋值,这在操作上非常便捷。

3. 常见操作方法

  • 插入数据:可以使用insert方法插入数据,或直接通过索引赋值([])。
  • 查找数据:使用find方法查找某个键是否存在,返回一个指向该键值对的迭代器;如果未找到,则返回map.end()
  • 删除数据:可以使用erase方法删除指定键的数据,也可以清空整个map
  • 访问大小size()方法返回当前键值对的数量。
  • 检查空状态:通过empty()方法可以检查map是否为空。

示例:查找与删除操作

map<int, string> myMap = {{1, "A"}, {2, "B"}, {3, "C"}};
auto it = myMap.find(2);
if (it != myMap.end()) {cout << "Found: " << it->second << endl;
} else {cout << "Not found" << endl;
}
myMap.erase(2);  // 删除键为2的元素

4. unordered_map概述与map的区别

unordered_map是一个无序的键值对容器,不会自动按键的顺序进行排列。它的实现方式不同于map,它使用哈希表结构,因此查找、插入和删除的效率通常更高,但不保证键的顺序。

使用场景与注意事项

  • 适用场景unordered_map适用于需要高效查找的场景,比如词频统计、快速检索等。
  • 缺点:由于哈希表的特性,unordered_map的内存占用可能较大,且不保证键的顺序。

示例:使用unordered_map

#include <unordered_map>
unordered_map<int, string> unorderedMap = {{1, "A"}, {2, "B"}, {3, "C"}};
unorderedMap[4] = "D";  // 插入一个新的键值对for (const auto &pair : unorderedMap) {cout << "Key: " << pair.first << ", Value: " << pair.second << endl;
}

5. 小结

通过本文的讲解,相信您对mapunordered_map在C++中的基本使用方法有了一个清晰的认识。map在需要按顺序存储键值对时很有用,而unordered_map在需要快速查找时非常高效。掌握这两种容器的使用可以帮助您在实际编程中灵活处理各类数据。


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

相关文章:

  • 如何从iconfont中获取字体图标并应用到微信小程序中去?
  • Educational Codeforces Round 171 (Rated for Div. 2) A~E
  • 115页PPT集团管控模型与企业实践5D
  • Java 虚拟机是什么?——探秘 JVM 的核心机制!
  • 数据结构————map,set详解
  • vue输入框只读,下拉框只读
  • c语言中结构体传参和实现位段
  • unseping攻防世界
  • 百度二面算法:合法的括号字符串(贪心解法)
  • 【机器学习】环境搭建及Sklearn鸢尾花数据集
  • Python | Leetcode Python题解之第519题随机翻转矩阵
  • Python中的切片是什么,它有什么用处?
  • 25_DNS:域名系统详解
  • C++ | Leetcode C++题解之第519题随机翻转矩阵
  • windows 驱动实例分析系列: NDIS 6.0的Filter 驱动改造(四)
  • Java | Leetcode Java题解之第520题检测大写字母
  • Linux(一)
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(五)使用 validation 验证参数
  • C++核心编程和桌面应用开发 第十七天(set和multiset容器 pair map和multimap容器)
  • Json库和文件操作
  • Cargo 的工作机制
  • 一道巧妙的卡特兰数建模
  • 聊聊解构的那些事
  • 本篇文章来介绍下dockerfile
  • LeetCode 热题 100 回顾2
  • Golang | Leetcode Golang题解之第519题随机翻转矩阵