程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++如何刪除map容器中指定值的元素詳解

C++如何刪除map容器中指定值的元素詳解

編輯:關於C++

C++如何刪除map容器中指定值的元素詳解。本站提示廣大學習愛好者:(C++如何刪除map容器中指定值的元素詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C++如何刪除map容器中指定值的元素詳解正文


C++如何刪除map容器中指定值的元素詳解

作者:vfhky

map容器是C++ STL中的重要一員,刪除map容器中value為指定元素的問題是我們經常與遇到的一個問題,下面這篇文章主要給大家介紹了關於利用C++如何刪除map容器中指定值的元素的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

大家都知道map容器是C++ STL中的重要一員,平時會遇到刪除map容器中value為指定元素的問題,例如刪除所有字符串為"123"或者能整除3的元素。

一、map容器下的方法說明

由於map容器下的方法較多,這裡只列舉代碼中用到的幾個方法:

insert()方法:

//插入val到pos的後面,然後返回一個指向這個元素的迭代器
iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &val );
//插入start到end的元素到map中
void insert( input_iterator start, input_iterator end );
//只有在val不存在時插入val。返回值是一個指向被插入元素的迭代器和一個描述是否插入的bool值
pair<iterator, bool> insert( const pair<KEY_TYPE,VALUE_TYPE> &val );

erase()方法:

//erase()函數刪除在pos位置的元素,或者刪除在start和end之間的元素,或者刪除那些值為key的所有元素
void erase( iterator pos );
void erase( iterator start, iterator end );
size_type erase( const KEY_TYPE &key );

iterator迭代器。

二、刪除map容器中指定的字符串

下面代碼中map容器的value對應的是一個string類型的指針,在初始化時類似於string *p = new string("123");

/**
 * @FileName map_del_str.cpp
 * @Describe A simple example for deleting an element of string in map.
 * @Author  vfhky 2016-06-26 10:26 https://typecodes.com/cseries/mapdelintstring.html
 * @Compile  g++ map_del_str.cpp -o map_del_str
 * @Reference 
 */
#include <iostream>
#include <map>

using namespace std;
#define TOTAL 10
#define DEL_STR "123"


/**
 * 刪除map中所有元素為str的數據
 */
void fun( map<int, string *> &map1, const string str )
{
 map<int, string *>::iterator it;
 int i_Total = 0;
 for( it=map1.begin(); it!=map1.end(); )
 {
  if( *(it->second) == str )
  {
   /**
    * 123 123 123 123 123 123 123 123 123 123 
    */
   cout << *(it->second) << " ";

   //一定要先釋放內存的控制
   delete it->second;
   it->second = NULL;

   //再刪除迭代
   map1.erase(it++);
   ++i_Total;
  }
  else
  {
   it++;
  }
 }

 //i_Total=[10]
 cout << endl << "i_Total=[" << i_Total << "]" << endl;
}

int main( int argc, char **argv )
{
 map<int, string *> map1;

 //初始化map1
 for( int i=0; i<TOTAL; i++ )
 {
  map1.insert( pair<int, string *>(i,new string("123")) );
  //map1[i] = new string("123");
 }

 //刪除為DEL_STR的元素
 fun( map1, DEL_STR );

 //查看最後的數據
 map<int, string *>::iterator it1;
 for( it1=map1.begin(); it1!=map1.end(); ++it1 )
 {
  cout << "map1[" << it1->first << "]=[" << *(it1->second) << "]" << endl;
 }
 return 0;
}

效果如下圖所示:

三、刪除map容器中指定的整型數據

下面代碼中map容器的value對應的是一個int數據,在初始化時可以直接使用map1[i] = i語句。

/**
 * @FileName map_del_int.cpp
 * @Describe A simple example for deleting an element of interger in map.
 * @Author  vfhky 2016-06-26 10:26 https://typecodes.com/cseries/mapdelintstring.html
 * @Compile  g++ map_del_int.cpp -o map_del_int
 * @Reference 
 */
#include <iostream>
#include <map>

using namespace std;
#define TOTAL 100
#define DEL_INT 3


/**
 * 刪除map中所有值整除NUM的元素
 */
void fun( map<int,int> &map1, const int NUM )
{
 map<int, int>::iterator it;
 int i_Total = 0;
 for( it=map1.begin(); it!=map1.end(); )
 {
  if( it->second % NUM == 0 )
  {
   /**
    * 0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 
    */
   cout << it->second << " ";
   map1.erase(it++);
   ++i_Total;
  }
  else
  {
   it++;
  }
 }
 cout << endl << "i_Total=[" << i_Total << "]" << endl;
}

int main( int argc, char **argv )
{
 map<int, int> map1;

 //初始化map1
 for( int i=0; i<TOTAL; i++ )
 {
  map1.insert(pair<int, int>(i,i));
  //map1[i] = i;
 }

 //刪除整除3的元素
 fun( map1, DEL_INT );

 //查看最後的數據
 map<int, int>::iterator it1;
 for( it1=map1.begin(); it1!=map1.end(); ++it1 )
 {
  cout << "map1[" << it1->first << "]=[" << it1->second << "]" << endl;
 }
 return 0;
}

效果如下圖所示:

四、附錄

STL容器分順序容器Sequence Container(包含vector,deque,list容器)和關聯容器Associative Container(包含set,multiset,map,multimap容器)。C++標准中,Sequence Container的erase函數會返回iterator,但Associative Container不返回iterator。所以在小節2、小節3中使用map1.erase(it++)而不是直接map1.erase(it)

五、總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對的支持。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved