C++ 多映射 erase() 函数用于从多映射容器中删除与给定键值关联的单个元素或一系列元素。因此,大小将因删除的元素数量而减少。
用法
void erase (iterator position);                       	  //until C++ 11
size_type erase (const key_type& k);    		  //until C++ 11
void erase (iterator first, iterator last);  		  //until C++ 11
iterator  erase (const_iterator position);		  //since C++ 11
size_type erase (const key_type& k);		  //since C++ 11	
iterator  erase (const_iterator first, const_iterator last); //since C++ 11参数
position:Iterator 指向要从多重映射中删除的单个元素。
k: 要从多重映射中删除的元素的键。
first:要擦除的范围的开始。
last:要擦除的范围结束。
返回值
它返回一个指向已删除元素的下一个元素的迭代器或返回已删除元素的数量。
复杂度
擦除(位置):摊销常数。
擦除(val):容器大小的对数。
擦除(第一个,最后一个):第一个和最后一个之间的距离是线性的。
迭代器有效性
迭代器、引用和指向被函数删除的元素的指针无效。
所有其他迭代器、指针和引用保持其有效性。
数据竞争
容器被修改。
删除的元素被修改。尽管同时访问其他元素是安全的,但在容器中迭代范围并不安全。
异常安全
该函数不会抛出异常。
如果指定了无效的范围或位置,则会导致未定义的行为。
例子1
让我们看看通过迭代器擦除元素的简单示例。
#include <iostream>
#include <map>
using namespace std;
int main ()
{
  multimap<char,int> mymultimap;
  multimap<char,int>::iterator it;
  mymultimap= {
              {'a', 100},
              {'b', 200},
              {'b', 300},
              {'c', 400}
              };
  
  cout<<"Before erasing the element:\n";
   for (it=mymultimap.begin(); it!=mymultimap.end(); ++it)
    std::cout << it->first << " => " << it->second << '\n';
  it=mymultimap.find('b');
  mymultimap.erase (it);                   // erasing by iterator
  cout<<"\nAfter erasing the element:\n";
  for (it=mymultimap.begin(); it!=mymultimap.end(); ++it)
    std::cout << it->first << " => " << it->second << '\n';
  return 0;
}输出:
Before erasing the element: a => 100 b => 200 b => 300 c => 400 After erasing the element: a => 100 b => 300 c => 400
在上面的例子中,元素被迭代器 it 擦除。
例子2
让我们看一个简单的例子,用给定的键值擦除 multimap 的元素:
#include <iostream>
#include <map>
using namespace std;
int main ()
{
  multimap<char,int> mymultimap;
  multimap<char,int>::iterator it;
  mymultimap = {
               {'a', 100},
               {'b', 200},
               {'b', 300},
               {'c', 400}
               };
  
  cout<<"Before erasing the element:\n";
   for (it=mymultimap.begin(); it!=mymultimap.end(); ++it)
    std::cout << it->first << " => " << it->second << '\n';
 mymultimap.erase ('b');                  // erasing by key
  cout<<"\nAfter erasing the element:\n";
  for (it=mymultimap.begin(); it!=mymultimap.end(); ++it)
    std::cout << it->first << " => " << it->second << '\n';
  return 0;
}输出:
Before erasing the element: a => 100 b => 200 b => 300 c => 400 After erasing the element: a => 100 c => 400
在上面的例子中,erase(key) 函数从多重映射中擦除所有的键 'b' 及其值。
例子3
让我们看一个简单的例子来擦除给定范围内的元素:
#include <iostream>
#include <map>
using namespace std;
int main ()
{
  multimap<char,int> mymultimap;
  multimap<char,int>::iterator it;
  mymultimap = {
               {'a', 100},
               {'b', 200},
               {'b', 300},
               {'c', 400}
               };
  
  cout<<"Before erasing the element are:\n";
   cout<<"Size is:"<<mymultimap.size()<<'\n';
   for (it=mymultimap.begin(); it!=mymultimap.end(); ++it)
   cout << it->first << " => " << it->second << '\n';
   mymultimap.erase ( mymultimap.begin () ,  mymultimap.end () );   // erasing by range
  cout<<"\nAfter erasing the element are:\n";
  cout<<"Size is:"<<mymultimap.size();
  for (it=mymultimap.begin(); it!=mymultimap.end(); ++it)
  cout << it->first << " => " << it->second << '\n';
  return 0;
}输出:
Before erasing the element are: Size is:4 a => 100 b => 200 b => 300 c => 400 After erasing the element are: Size is:0
在上面的例子中,erase (first, last) 函数用于擦除给定范围内的元素,即开始到结束。
示例 4
让我们看一个简单的例子来擦除多重映射中的所有奇数:
#include <map>
#include <iostream>
using namespace std;
int main()
{
    multimap<int, string> m = { {1, "one"}, 
                                {2, "two"}, 
                                {3, "three"},
                                {4, "four"}, 
                                {5, "five"}, 
                                {6, "six"}
                               };
                          
    // erase all odd numbers from m
    cout<<"After erasing odd numbers,elements are:\n ";
    for(auto it = m.begin(); it != m.end(); )
        if(it->first % 2 == 1)
            it = m.erase(it);
        else
            ++it;
    for(auto& p:m)
        cout <<p.first <<", "<< p.second << "\n ";
}输出:
After erasing odd numbers, elements are: 2, two 4, four 6, six
在上面的例子中,所有的奇数都被擦除了,显示的是偶数。
相关用法
- C++ multimap empty()用法及代码示例
- C++ multimap emplace()用法及代码示例
- C++ multimap equal_range()用法及代码示例
- C++ multimap end()用法及代码示例
- C++ multimap key_comp()用法及代码示例
- C++ multimap cend()用法及代码示例
- C++ multimap insert()用法及代码示例
- C++ multimap lower_bound()用法及代码示例
- C++ multimap rend()用法及代码示例
- C++ multimap maxsize()用法及代码示例
- C++ multimap rend用法及代码示例
- C++ multimap get_allocator()用法及代码示例
- C++ multimap upper_bound()用法及代码示例
- C++ multimap clear()用法及代码示例
- C++ multimap crend()用法及代码示例
- C++ multimap crbegin()用法及代码示例
- C++ multimap key_comp用法及代码示例
- C++ multimap rbegin用法及代码示例
- C++ multimap rbegin()用法及代码示例
- C++ multimap value_comp()用法及代码示例
注:本文由纯净天空筛选整理自 C++ multimap erase() function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
