欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

unordered_multimap

时间:2024-05-11 14:41 作者:admin 点击:
在C++标准模板库(STL)中, unordered_multimap 是一个关联容器,它存储键值对,并且允许键值对中的键有多个相同元素。它是基于哈希表实现的,因此查找、插入和删除操作通常具有平均

在C++标准模板库(STL)中,unordered_multimap 是一个关联容器,它存储键值对,并且允许键值对中的键有多个相同元素。它是基于哈希表实现的,因此查找、插入和删除操作通常具有平均时间复杂度为 O(1) 的特点。

以下是 unordered_multimap 的一些关键特性和操作:

  1. 键的唯一性:与 map 不同,unordered_multimap 允许有相同键的多个元素。
  2. 无序性:元素在容器中不是按照键排序的,而是根据哈希函数的值进行存储。
  3. 迭代器:unordered_multimap 提供了迭代器,可以遍历所有元素。
  4. 元素访问:可以使用键来查找对应的值,但因为可能存在多个具有相同键的元素,所以返回的是一个迭代器范围。
  5. 构造与初始化:可以默认构造一个空的 unordered_multimap,也可以通过范围来初始化它。
  6. 大小操作:可以查询 unordered_multimap 的大小,即它包含的键值对数量。
  7. 插入操作:可以插入一个键值对,或者通过范围来插入多个键值对。
  8. 删除操作:可以根据键或者迭代器来删除元素。
  9. 查找操作:可以使用键来查找对应的值,返回的是一对迭代器,表示具有该键的所有元素的范围。
  10. 哈希函数和键比较函数:unordered_multimap 使用用户提供的哈希函数和键比较函数来管理元素。

下面是一个简单的 unordered_multimap 使用示例:

#include <iostream>
#include <unordered_map>

int main() {
    // 创建一个 unordered_multimap
    std::unordered_multimap<int, std::string> umm;

    // 插入元素
    umm.insert(std::make_pair(1, "one"));
    umm.insert(std::make_pair(1, "another one"));
    umm.insert(std::make_pair(2, "two"));

    // 遍历 unordered_multimap
    for (const auto& pair : umm) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }

    // 根据键查找元素
    auto range = umm.equal_range(1);
    for (auto it = range.first; it != range.second; ++it) {
        std::cout << "Found: " << it->second << std::endl;
    }

    // 删除一个元素
    umm.erase(umm.begin());

    // 删除特定键的所有元素
    umm.erase(2);

    return 0;
}

请注意,unordered_multimap 的行为可能会因为哈希函数的质量和键比较函数的效率而有所不同。在设计哈希表时,一个好的哈希函数可以帮助减少冲突,从而提高性能。


(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%