C++怎么刪除map容器中指定值的元素

這篇文章給大家分享的是有關C++怎么刪除map容器中指定值的元素的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)服務項目包括正藍網站建設、正藍網站制作、正藍網頁制作以及正藍網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,正藍網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到正藍省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

一、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()函數(shù)刪除在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的數(shù)據(jù)
 */
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 );

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

效果如下圖所示:

C++怎么刪除map容器中指定值的元素

三、刪除map容器中指定的整型數(shù)據(jù)

下面代碼中map容器的value對應的是一個int數(shù)據(jù),在初始化時可以直接使用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 );

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

效果如下圖所示:

C++怎么刪除map容器中指定值的元素

四、附錄

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

感謝各位的閱讀!關于“C++怎么刪除map容器中指定值的元素”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

分享文章:C++怎么刪除map容器中指定值的元素
新聞來源:http://m.kartarina.com/article24/pphije.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機標簽優(yōu)化營銷型網站建設面包屑導航軟件開發(fā)Google

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站建設
主站蜘蛛池模板: 亚洲av永久无码嘿嘿嘿| 国产在线无码一区二区三区视频 | 国产久热精品无码激情| 中文字幕无码中文字幕有码 | 精品无码久久久久久国产| 亚洲一本到无码av中文字幕| 亚洲一区无码精品色| 少妇精品无码一区二区三区| 亚洲AV无码XXX麻豆艾秋| 久久av高潮av无码av喷吹| 亚洲国产成人无码av在线播放 | 亚洲最大av无码网址| 亚洲色无码国产精品网站可下载| 国产a v无码专区亚洲av| 亚洲精品无码专区久久| 久久午夜无码免费| 亚洲色偷拍区另类无码专区| 永久免费AV无码国产网站| 亚洲国产综合无码一区 | 中文字幕无码久久久| 伊人无码精品久久一区二区 | 激情无码人妻又粗又大中国人| 乱人伦人妻中文字幕无码久久网| 国产精品无码无片在线观看| 无码日韩人妻精品久久| 亚洲a∨无码一区二区| 亚洲AV无码一区二区三区在线| 亚洲色无码一区二区三区| 国内精品久久久久久无码不卡| 一区二区无码免费视频网站| 亚洲AV日韩AV永久无码久久| 夜夜添无码试看一区二区三区| 精品久久久久久无码中文字幕一区| 无码AV岛国片在线播放| 亚洲熟妇无码八AV在线播放| 成人无码A区在线观看视频| 亚洲男人在线无码视频| 西西4444www大胆无码| 精品人妻少妇嫩草AV无码专区| WWW久久无码天堂MV| 国产午夜无码福利在线看网站|