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

map

时间:2024-05-11 14:37 作者:admin 点击:
在C++标准模板库(STL)中, map 是一种关联容器,它存储键值对(key-value pairs),并且每对中的键(key)是唯一的。 map 中的元素是有序的,根据键的顺序进行排序,通常是升序。 map 通

在C++标准模板库(STL)中,map 是一种关联容器,它存储键值对(key-value pairs),并且每对中的键(key)是唯一的。map 中的元素是有序的,根据键的顺序进行排序,通常是升序。map 通常是基于平衡二叉搜索树(如红黑树)实现的,提供对数时间的查找、插入和删除操作。

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

主要特点

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

主要操作

  • 构造:可以构造一个空的 map 或者使用一系列键值对初始化。
  • 插入insert 一个新键值对。如果 map 中已存在相同的键,则不会插入。
  • 查找find 查找一个键对应的值。
  • 计数count 一个键的个数,由于 map 中键唯一,计数结果永远是1或0。
  • 删除
  • 大小size 返回容器中键值对的数量。
  • 上界和下界
  • 范围equal_range 返回一个范围,包含所有与给定键相等的键值对。

使用 std::map 的步骤

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

示例代码

#include <iostream>
#include <map>

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

    // 向映射中插入键值对
    myMap.insert({1, "one"});
    myMap.insert({2, "two"});
    myMap.insert({3, "three"});

    // 查找键对应的值
    auto it = myMap.find(2);
    if (it != myMap.end()) {
        std::cout << "Found: " << it->second << std::endl; // 输出 "two"
    }

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

    // 删除键值对
    myMap.erase(2);

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

    return 0;
}

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

注意事项

  • std::map 中的元素默认是按键的升序排序的,如果需要降序或其他自定义排序,可以提供自定义比较函数。
  • std::map 不支持随机访问,因为元素是有序存储的。
  • std::map 的迭代器在插入或删除操作后可能会变得无效,需要小心处理。
  • 在多线程环境中使用 std::map 时,需要注意线程安全问题,因为 std::map 并不是线程安全的。

std::map 是实现有序映射的便捷方式,适用于需要根据键快速查找、插入和删除操作的场景。


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