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()方法时,我们需要注意以下几点:
- 如果要删除的元素不存在,erase()方法不会进行任何操作。
- 如果unordered_map中有相同的键,则只有第一个键值对会被删除。
- erase()方法会使迭代器失效。因此,在删除元素后,我们应该使用返回的新迭代器。
- 如果在迭代unordered_map时进行删除操作,会导致未定义的行为。因此,我们应该在遍历map时先记录需要删除的元素的位置,然后再进行删除操作。
结论
C++ STL中的unordered_maperase()方法是一个非常有用的方法,它能够帮助我们快速地删除unordered_map中的键值对。通过掌握erase()方法的使用方法和注意事项,我们可以更加熟练地使用unordered_map,提高程序的效率和稳定性。