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 :指向从multimap中移除的单个元素的迭代器。

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

在上面的示例中,元素被迭代器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)函数会擦除multimap中所有键为’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(首,尾)函数来删除给定范围的元素,即从开始到结束。

示例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

在上面的示例中,所有的奇数已经被删除,只显示偶数。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程