C++ 关联数组

17 Mar 2025 | 5 分钟阅读

在本文中,我们将讨论 C++ 中的**_关联数组_**及其特性和示例。

在 C++ 语言中,关联数组指的是关联键和值的数据结构。它们对于基于相应键存储和检索值非常有效。这些关联数组使用标准模板库提供的各种容器实现。关联数组的主要容器是 **_map_** 和 **_unordered_map_**。这些容器允许我们将键与值关联起来。它们是通用且功能强大的数据结构,可用于解决各种问题。

C++ 中关联数组的基本特性

C++ 中关联数组有几个特性。关联数组的一些主要特性如下:

  • 键值关联

关联数组中的每个元素只能以键值对的形式存在。其中键是唯一的,每个值仅与一个键相关联。数据的值与键相关联。

  • 灵活的键数据类型

关联数组中的键可以是任何类型,包括整数、字符串、对象或用户定义类型。

  • 高效的基于键的查找

这些针对基于键的元素高效查找进行了优化。使用键访问值比遍历传统数组更快。

  • 动态大小和插入

当添加新的键值对时,关联数组可以增长。当我们从中删除或移除键值对时,它们会收缩,因此在处理数组大小时不会出现问题。

关联数组中的常见操作

关联数组中有几个常见操作。关联数组的一些主要操作如下:

  • 插入

此操作向关联数组添加新的键值对。它通过使用方括号或 C++ 中的插入函数来完成。

  • 访问元素

访问检索与特定键关联的值。如果键存在于数组中,我们可以通过使用它来访问其值。如果键不存在,则会使用默认构造的值创建一个新条目。

  • 更新元素

**_更新_** 允许修改与特定键关联的值。如果它不存在于数组中,它将创建一个新的键值对。

  • 删除

此操作将删除关联数组中特定的键值对。擦除函数通常用于此操作。

  • 检查存在性

查找函数检查关联数组中是否存在特定键。如果键存在于数组中,它将返回指向该元素的迭代器指针。如果键不存在,它将返回 **_end()_**。

  • 大小

**_size_** 函数用于获取关联数组的大小

这些是 C++ 中用于操作和查询关联数组的基本操作。这些关联数组将提供更快的平均查找时间。这些操作的时间复杂度,尤其是在处理大型数据集时。

关联数组在 C++ 中的应用

  • 它们用于各种场景,其中高效的基于键的数据检索至关重要。它们用于字典、数据库索引、符号表、配置管理、缓存、计数出现次数、图算法、任务调度、记忆化、频率分析、HTTP 服务和配置管理。
  • 在**_缓存系统_**中,关联数组可以存储带有唯一键的频繁访问数据,从而实现快速检索并减少从较慢源获取数据的需要。
  • 当程序员处理图算法时,关联数组表示邻接列表,将每个顶点映射到其相邻顶点列表。
  • 当程序员解决与动态规划和递归相关的程序时,关联数组可用于记忆化,它存储以前计算的结果以避免错误的计算。
  • 在 Web 开发中,关联数组可以表示 **_HTTP 标头_**,其中标头名称是键,相应的值是标头值。

现在,我们将讨论一些关联数组

  • Map

这些实现为排序二叉树并保持键的排序顺序。它在编程中最常用。

  • 无序映射 (Unordered_map)

它实现哈希表。它将提供比 map 更快的插入和检索。在这里,不维护键值对的插入顺序。

  • 多重映射 (Multimap)

它也类似于 map,但它将允许重复的键对。这意味着它将允许具有相同键的多个元素。

  • 无序多重映射 (Unordered_multimap)

它类似于 **_unordered_map_** 并通过使用哈希表实现。它允许具有相同键的多个元素。

示例

让我们举一个 C++ 程序来说明 **_unordered_map_**:

输出

Associative arrays in C++

示例 2

让我们举一个 C++ 程序来说明 **_map_**:

输出

Associative arrays in C++

示例 3

让我们举一个 C++ 程序来说明 **_multimap_**:

输出

Associative arrays in C++