C++ STL 中的 Map 容器详解

Map 是一种关联容器,它使用自平衡红黑树按照排序顺序存储键值对。它确保了搜索、插入和删除操作的时间复杂度为 O(log n),不允许重复的键,并且支持有序遍历以及 INLINECODE2a19f8d9 和 INLINECODE8192a68c 等函数。

C++


CODEBLOCK_ed2bf611

输出结果

1 Geeks
2 For
3 Geeks

讲解: 上面的程序演示了如何在 C++ 中使用键值对来创建和初始化 map。然后,它使用基于范围的循环遍历该 map,并打印每个键及其对应的值。

语法

Map 容器被定义为位于

头文件内的 std::map 类模板。

> map<keytype, valuetype> m;

其中,

  • key_type: 键的数据类型。
  • value_type: 值的数据类型。
  • m: 分配给 map 的名称。

基本操作

下面展示 map 容器的一些基本操作:

1. 插入元素

  • insert() 操作仅在键不存在的情况下向 map 添加一个新的键值对。
  • 如果键已经存在,insert() 不会更新该值,并保持 map 不变。
  • 插入操作的时间复杂度为 O(log n)。

C++


CODEBLOCK_da2dd993

输出结果

1 Geeks
2 For
3 Geeks

2. 访问元素

  • 我们可以使用 [] 运算符访问元素,它会返回给定键的值;如果键不存在,它会插入一个带有默认值的键。
  • 为了在检查键是否存在时避免添加它,我们可以使用 find()
  • 通过键访问元素的时间复杂度为 O(log n)。

C++


CODEBLOCK_251cd42d

输出结果

Geeks
For

3. 更新元素

  • 要更新一个值,我们可以简单地使用 map[key]= newValue 给现有键赋一个新值;如果键已经存在,该值就会被更新。
  • 通过键更新元素的时间复杂度为 O(log n)。

C++


CODEBLOCK_31172548

输出结果

Tweaks
By

4. 查找元素

  • find() 函数用于检查 map 中是否存在某个键,它会查找该键并在找到时返回其位置(迭代器)。
  • 如果 map 中不存在该键,INLINECODEeb101a05 将返回一个名为 INLINECODE8bbe47ae 的特殊值,意味着未找到。
  • 通过键查找元素的时间复杂度为 O(log n)。

C++


CODEBLOCK_2411bcd6

输出结果

2 For

5. 遍历

  • 我们可以使用循环来遍历 map 中的所有键值对,这将按键的排序顺序依次访问每一对。
  • 遍历 map 的时间复杂度为 O(n)。

C++


CODEBLOCK_5591d871

输出结果

1 Geeks
2 For
3 Geeks

6. 删除元素

  • 要从 map 中删除一个键及其值,请使用 erase(key),如果键存在,它将删除该键值对,否则什么也不做。
  • 通过键删除元素的时间复杂度为 O(log n)。

C++

`

#include 
#include 
using namespace std;

int main() {
    map m = {{1, "Geeks"},
             {2, "For"}, {3, "Geeks"}};

    // 通过键删除
    m.erase(2);
    
    // 通过迭代器删除
    m.erase(m.begin());
    
    for(auto i : m)
        cout << i.first << " " << i.second
        << endl;
    return 0;
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/39530.html
点赞
0.00 平均评分 (0% 分数) - 0