C++ STL中的unordered_map erase

C++ STL中的unordered_map erase

C++ STL标准库中,unordered_map是一个非常有用的数据结构,它可以快速地存储和查找键值对。unordered_map是由哈希表实现的,因此它的插入和查找操作的时间复杂度都是 O(1)。此外,它还支持许多实用的方法,如erase()方法。

erase()方法的概述

erase()方法是unordered_map中用于删除键值对的方法。它有多种形式,可以使用不同的参数来删除不同的元素。下面我们一一介绍。

1. erase()方法

当我们只传入一个参数时,erase()方法将删除unordered_map中的键值对,并返回删除的元素的数量。具体用法如下所示:

#include <iostream>
#include <unordered_map>
using namespace std;

int main()
{
    unordered_map<int, string> myMap = {
        {1, "one"},
        {2, "two"},
        {3, "three"}
    };

    int num = myMap.erase(2);
    cout << "Deleted " << num << " element(s)" << endl;

    for (auto it = myMap.begin(); it != myMap.end(); it++)
    {
        cout << it->first << ": " << it->second << endl;
    }

    return 0;
}

输出为:

Deleted 1 element(s)
1: one
3: three

2. erase()方法与迭代器

当我们传入一个unordered_map的迭代器时,erase()方法将删除该迭代器所指向的元素,并返回指向其后面元素的迭代器。如果该元素是最后一个元素,则返回end()迭代器。具体用法如下所示:

#include <iostream>
#include <unordered_map>
using namespace std;

int main()
{
    unordered_map<int, string> myMap = {
        {1, "one"},
        {2, "two"},
        {3, "three"}
    };

    auto it = myMap.find(2);
    if (it != myMap.end())
    {
        myMap.erase(it);
    }

    for (auto it = myMap.begin(); it != myMap.end(); it++)
    {
        cout << it->first << ": " << it->second << endl;
    }

    return 0;
}

输出为:

1: one
3: three

3. erase()方法与范围

当我们传入一对迭代器作为参数时,erase()方法将删除指定范围内的元素,并返回指向其后面元素的迭代器。具体用法如下所示:

#include <iostream>
#include <unordered_map>
using namespace std;

int main()
{
    unordered_map<int, string> myMap = {
        {1, "one"},
        {2, "two"},
        {3, "three"},
        {4, "four"},
        {5, "five"}
    };

    auto start = myMap.find(2);
    auto end = myMap.find(4);
    if (start != myMap.end() && end != myMap.end())
    {
        myMap.erase(start, end);
    }

    for (auto it = myMap.begin(); it != myMap.end(); it++)
    {
        cout << it->first << ": " << it->second << endl;
    }

    return 0;
}

输出为:

1: one
4: four
5: five

操作注意事项

在使用erase()方法时,我们需要注意以下几点:

  1. 如果要删除的元素不存在,erase()方法不会进行任何操作。
  2. 如果unordered_map中有相同的键,则只有第一个键值对会被删除。
  3. erase()方法会使迭代器失效。因此,在删除元素后,我们应该使用返回的新迭代器。
  4. 如果在迭代unordered_map时进行删除操作,会导致未定义的行为。因此,我们应该在遍历map时先记录需要删除的元素的位置,然后再进行删除操作。

结论

C++ STL中的unordered_maperase()方法是一个非常有用的方法,它能够帮助我们快速地删除unordered_map中的键值对。通过掌握erase()方法的使用方法和注意事项,我们可以更加熟练地使用unordered_map,提高程序的效率和稳定性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程