std::map

std::map 是 C++ 标准库中的一个关联容器,它用于存储键值对。每个键值对由一个键(key)和一个对应的值(value)组成,并且 std::map 会根据键自动排序。以下是 std::map 的一些主要特点和用法:

主要特点

  1. 自动排序std::map 会根据键的顺序自动对元素进行排序,默认是升序排序。排序依据是键的比较函数,通常是使用 < 运算符进行比较。

  2. 唯一键:在 std::map 中,每个键是唯一的,不能有重复的键。如果插入一个已经存在的键,那么原有的值会被更新。

  3. 基于红黑树std::map 通常是基于红黑树(一种自平衡的二叉查找树)实现的,这使得插入、删除和查找操作的时间复杂度为 O(log n)。

  4. 键值对存储:每个元素都是一个 std::pair<const Key, T>,其中 Key 是键的类型,T 是值的类型。

示例代码

#include <iostream>
#include <map>

int main() {
    std::map<int, std::string> myMap;

    // 插入元素
    myMap[1] = "one";
    myMap[2] = "two";
    myMap[3] = "three";

    // 修改元素
    myMap[3] = "new three";

    // 删除元素
    // 删除键为2的元素
    myMap.erase(2);

    // 访问元素
    // 如果访问的键不存在,[] 操作符会插入一个默认构造的值。
    std::cout << myMap[3] << std::endl;

    // 遍历元素
    for (const auto &pair : myMap) {
        std::cout << pair.first << ": " << pair.second << '\n';
    }

    // 查找元素
    // find 函数,如果找到了该元素,它会返回一个指向该元素的迭代器;如果没有找到,它会返回 std::map::end() 迭代器。
    if (myMap.find(2) != myMap.end()) {
        std::cout << "Key 2 exists with value: " << myMap[2] << '\n';
    }

    // 查找元素
    // count 函数用于检查容器中是否存在指定的键 返回值要么是0要么是1 性能比find高些
    if (myMap.count(2) > 0) {
        std::cout << "Key 2 exists with value: " << myMap[2] << '\n';
    }

    return 0;
}

std::map 是一个非常灵活且功能强大的容器,适用于需要按键值对存储数据并保持排序的场景。

要向`std::map<std::string,std::map<std::string,std::string>>`类型的`my_map`中插入数据,可以按照以下步骤进行操作: 1. 创建要插入的数据项,包括外层`std::string`类型的键和内层`std::map<std::string,std::string>`类型的值。例如,假设要插入的数据项为`key1 -> (inner_key1 -> value1, inner_key2 -> value2)`。 2. 使用`my_map[key1]`来访问外层`std::map`中的键`key1`对应的值,如果该键不存在,则会自动创建一个新的内层`std::map`。 3. 使用内层`std::map`的插入函数,例如`my_map[key1].insert(std::make_pair(inner_key1, value1))`,将内层键值对`(inner_key1, value1)`插入到对应的内层`std::map`中。 4. 重复上述步骤,插入其他内层键值对。 下面是一个示例代码,演示了如何向`my_map`中插入数据: ```cpp #include <iostream> #include <map> #include <string> int main() { std::map<std::string, std::map<std::string, std::string>> my_map; // 创建要插入的数据项 std::string key1 = "key1"; std::string inner_key1 = "inner_key1"; std::string value1 = "value1"; std::string inner_key2 = "inner_key2"; std::string value2 = "value2"; // 插入数据项 my_map[key1].insert(std::make_pair(inner_key1, value1)); my_map[key1].insert(std::make_pair(inner_key2, value2)); // 输出结果 for (const auto& outer_pair : my_map) { std::cout << outer_pair.first << " -> "; for (const auto& inner_pair : outer_pair.second) { std::cout << "(" << inner_pair.first << " -> " << inner_pair.second << ") "; } std::cout << std::endl; } return 0; } ``` 输出结果为: ``` key1 -> (inner_key1 -> value1) (inner_key2 -> value2) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值