📜  C++ STL中的unordered_multimap擦除(1)

📅  最后修改于: 2023-12-03 14:59:46.918000             🧑  作者: Mango

C++ STL中的unordered_multimap擦除

在C++中,STL容器提供了unordered_multimap来存储键-多值的关联数据。unordered_multimap中允许同一个键关联多个值,这与普通的map不同。在使用unordered_multimap时,我们可能需要删除某个键所关联的所有值,本文将介绍如何使用STL中的unordered_multimap擦除操作。

假设我们有以下unordered_multimap:

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main()
{
    unordered_multimap<string, int> mymap = { {"apple", 10}, {"banana", 20}, {"apple", 30}, {"pear", 40} };

    // 输出unordered_multimap中的所有键值对
    for (auto it = mymap.begin(); it != mymap.end(); it++)
    {
        cout << it->first << " " << it->second << endl;
    }

    return 0;
}

输出结果:

apple 10
apple 30
banana 20
pear 40

现在我们想从unordered_multimap中删除所有键为"apple"的元素。我们可以使用STL中的erase函数:

mymap.erase("apple");

但这会删除所有键为"apple"的键值对,包括和其他键相关联的键值对。如果我们只想删除和"apple"键相关联的所有键值对,我们需要使用iterator的erase函数。

// 查找unordered_multimap中所有键为"apple"的元素,并删除它们
for (auto it = mymap.begin(); it != mymap.end();)
{
    if (it->first == "apple")
    {
        it = mymap.erase(it);
    }
    else
    {
        it++;
    }
}

此时输出结果:

banana 20
pear 40

我们可以看到,所有键为"apple"的键值对已经被成功删除。

在使用unordered_multimap中的擦除操作时,需要注意一些细节。首先,当我们使用iterator的erase函数时,返回的迭代器指向的是被删除元素的下一个元素。其次,当我们使用迭代器访问unordered_multimap时,要尽量避免使用指针或引用来保存迭代器。

以上是关于C++ STL中的unordered_multimap擦除的介绍。使用STL中的unordered_multimap可以方便地存储和管理键-多值的关联数据,而使用擦除操作可以快速地删除某个键所关联的所有值。