C++ STL中的 multimap::erase()
在C++ STL(标准模板库)中,multimap
是一个非常有用的容器,它允许我们存储多个键相同的值。这个容器的工作原理非常简单:对于一个键,它可以存储多个与之对应的值,而且这些值是按照键的顺序进行排序的。
在实际应用中,我们通常需要从multimap
中删除某个健值对,这个时候就可以使用它提供的erase()
函数。erase()
函数可以删除multimap
中的某个键值对,或者一段范围内的键值对。
下面是一个简单的示例代码,演示了如何使用multimap::erase()
函数删除键值对:
#include <iostream>
#include <map>
int main()
{
std::multimap<char,int> mymultimap;
std::multimap<char,int>::iterator it;
// insert some values:
mymultimap.insert(std::make_pair('a',10));
mymultimap.insert(std::make_pair('b',20));
mymultimap.insert(std::make_pair('b',30));
mymultimap.insert(std::make_pair('c',40));
mymultimap.insert(std::make_pair('d',50));
mymultimap.insert(std::make_pair('d',60));
mymultimap.insert(std::make_pair('d',70));
// erase all values with key 'b'
it = mymultimap.find('b');
mymultimap.erase (it, mymultimap.end());
// print content:
std::cout << "multimap contains:\n";
for (it=mymultimap.begin(); it!=mymultimap.end(); ++it)
std::cout << it->first << " => " << it->second << '\n';
return 0;
}
这段代码定义了一个multimap
对象mymultimap
,并且随机插入了几组键值对。然后我们使用find()
函数找到所有键为'b'
的元素,并用erase()
函数删除它们。最后我们输出mymultimap
对象中剩下的所有键值对。
在这个示例中,erase()
函数使用了两个参数。第一个参数it
是一个指向要删除的元素的迭代器,在这个示例中,我们使用了find()
函数来查找键值为'b'
的元素,并把指向它的迭代器赋值给了it
。第二个参数是一个指向要删除的最后一个元素的下一个元素的迭代器。在这个示例中,我们使用了end()
函数获取指向容器中最后一个元素的下一个元素的迭代器。因此,这个函数就会删除从it
到mymultimap.end()
之间的所有键值对。
另外,如果我们只要删除一个指定的键值对,而不是一整段范围内的键值对,我们可以直接传递要删除的键值对的迭代器给erase()
函数。例如:
// erase one element with key 'c'
mymultimap.erase ( mymultimap.find('c') );
这个示例在multimap
中查找键为'c'
的元素,并删除它。
结论
在本文中,我们简单介绍了C++ STL中的multimap
容器,以及如何使用erase()
函数删除其中的键值对。我们还讨论了erase()
函数的两种用法:删除一个指定的键值对,或者删除指定范围内的所有键值对。multimap
是一个非常有用的容器,它允许我们存储多个键相同的值,这在某些应用场景下是非常有用的。在实际应用中,我们可以使用erase()
函数来删除不需要的键值对,以减少不必要的内存开销。不过需要注意的是,如果我们删除了包含某个键的所有键值对,那么这个键也会从multimap
中被删除。因此,在删除键值对时需要注意。
总体来说,multimap
容器提供了一种非常方便的方式来存储一组具有相同键的元素,并且可以自动按键的顺序进行排序。而erase()
函数则可以帮助我们删除其中不再需要的元素,从而精简我们的代码并节省内存。