C++教程
C++控制语句
C++函数
C++数组
C++指针
C++对象
C++继承
C++多态
C++抽象
C++常用
C++ STL教程
C++迭代器
C++程序

C++ multimap erase()

C++ multimap erase()函数

C++ multimap erase()函数用于删除与给定键值关联的单个元素或multimap容器中元素的范围。因此,将通过删除元素的数量来减小大小。

语法

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: 迭代器指向要从多地图中删除的单个元素。
k : 要从 multimap 上删除的元素的键。
first: 要擦除的范围的开始。
last: 要擦除的范围的结尾。

返回值

它返回一个迭代器,该迭代器指向已删除元素的下一个元素或返回删除元素的数量。

复杂度

erase(position): 摊余常数。
erase(val): 容器大小的对数。
erase(first,last): first和last之间的距离呈线性。

迭代器有效性

迭代器,引用和指向该函数删除的元素的指针均无效。
所有其他迭代器,指针和引用均保持其有效性。

数据竞争

容器已修改。
已删除的元素已修改。尽管同时访问其他元素是安全的,但是在容器中进行迭代范围并不安全。

异常安全

此函数不会引发异常。
如果指定了无效的范围或位置,则会导致未定义的行为。

示例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
在上面的示例中,元素被迭代器擦除。

示例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
在上面的示例中,delete(key)函数从 set 映射中删除了所有键'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
在上面的示例中,擦除(第一个,最后一个)功能用于擦除具有给定范围(即开始到结束)的元素。

示例4

让我们看一个简单的示例,以删除 multimap 中的所有奇数:
#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
在上面的示例中,所有奇数均已删除并显示偶数。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4