📅  最后修改于: 2023-12-03 14:59:46.918000             🧑  作者: Mango
在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可以方便地存储和管理键-多值的关联数据,而使用擦除操作可以快速地删除某个键所关联的所有值。