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

multimap

时间:2024-05-11 14:40 作者:admin 点击:
在C++标准模板库(STL)中, multimap 是 map 的一个变体,它允许容器中存在具有相同键的多个元素。与 map 类似, multimap 也是基于平衡二叉搜索树实现的,但它可以存储相同键的多个值。

在C++标准模板库(STL)中,multimapmap 的一个变体,它允许容器中存在具有相同键的多个元素。与 map 类似,multimap 也是基于平衡二叉搜索树实现的,但它可以存储相同键的多个值。每个键在 multimap 中仍然是唯一的,但可以有多个与该键关联的值。

multimap 定义在 <map> 头文件中。

主要特点

  • 键值对:存储形式为 <key, value> 对,其中键可以不唯一。
  • 排序:元素根据键的顺序自动排列,通常是升序。
  • 二叉搜索树:内部使用平衡二叉搜索树实现,提供对数时间的查找、插入和删除操作。
  • 迭代器:提供双向迭代器,可以按顺序遍历容器中的元素。

主要操作

  • 构造:可以构造一个空的 multimap 或者使用一系列键值对初始化。
  • 插入insert 一个新键值对。与 map 不同,multimap 允许插入相同键的多个元素。
  • 查找find 查找一个键对应的值。由于可能有多个匹配的元素,需要使用迭代器范围。
  • 计数count 一个键的个数,返回匹配该键的元素数量。
  • 删除
  • 大小size 返回容器中键值对的数量。
  • 上界和下界
  • 范围equal_range 返回一个范围,包含所有与给定键相等的键值对。

使用 std::multimap 的步骤

  1. 包含头文件:使用 multimap 之前需要包含 <map> 头文件。
  2. 声明 multimap 实例:指定键和值的类型来声明 std::multimap 的实例。
  3. 初始化:可以默认构造一个空的 std::multimap,或者使用花括号 {} 初始化。
  4. 执行操作:使用 insert、find、erase 等方法操作多重映射。

示例代码

#include <iostream>
#include <map>

int main() {
    std::multimap<int, std::string> myMultiMap; // 键为int,值为string的multimap

    // 向多重映射中插入键值对
    myMultiMap.insert({1, "one"});
    myMultiMap.insert({1, "uno"});
    myMultiMap.insert({2, "two"});

    // 查找键对应的值
    auto range = myMultiMap.equal_range(1);
    for (auto it = range.first; it != range.second; ++it) {
        std::cout << it->first << ": " << it->second << std::endl;
    }

    // 遍历多重映射并输出所有键值对
    for (const auto& pair : myMultiMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }

    // 删除特定键的所有键值对
    myMultiMap.erase(1);

    // 再次遍历多重映射并输出所有键值对
    for (const auto& pair : myMultiMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }

    return 0;
}

在这个示例中,我们创建了一个 std::multimap 的实例,键是整数,值是字符串。然后,我们向多重映射中插入了一些键值对,包括具有相同键的多个值。接着,我们使用 equal_range 方法查找所有与特定键相等的键值对,并遍历多重映射输出所有键值对。然后,我们使用 erase 方法删除一个键的所有键值对,并再次输出多重映射中的键值对。

注意事项

  • std::multimap 中的元素默认是按键的升序排序的,如果需要降序或其他自定义排序,可以提供自定义比较函数。
  • std::multimap 允许有相同键的多个元素,count 方法可以返回匹配键的数量。
  • std::multimap 的迭代器在插入或删除操作后可能会变得无效,需要小心处理。
  • 在多线程环境中使用 std::multimap 时,需要注意线程安全问题,因为 std::multimap 并不是线程安全的。

std::multimap 是实现多重映射的便捷方式,适用于需要存储具有相同键的多个元素的场景。


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