C++如何刪除map容器中指定值的元素詳解
前言
大家都知道m(xù)ap容器是C++ STL中的重要一員,平時(shí)會(huì)遇到刪除map容器中value為指定元素的問題,例如刪除所有字符串為"123"或者能整除3的元素。
一、map容器下的方法說明
由于map容器下的方法較多,這里只列舉代碼中用到的幾個(gè)方法:
insert()方法:
//插入val到pos的后面,然后返回一個(gè)指向這個(gè)元素的迭代器 iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &val ); //插入start到end的元素到map中 void insert( input_iterator start, input_iterator end ); //只有在val不存在時(shí)插入val。返回值是一個(gè)指向被插入元素的迭代器和一個(gè)描述是否插入的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對(duì)應(yīng)的是一個(gè)string類型的指針,在初始化時(shí)類似于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) << " "; //一定要先釋放內(nèi)存的控制 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; }
效果如下圖所示:
三、刪除map容器中指定的整型數(shù)據(jù)
下面代碼中map容器的value對(duì)應(yīng)的是一個(gè)int數(shù)據(jù),在初始化時(shí)可以直接使用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; }
效果如下圖所示:
四、附錄
STL容器分順序容器Sequence Container(包含vector,deque,list容器)和關(guān)聯(lián)容器Associative Container(包含set,multiset,map,multimap容器)。C++標(biāo)準(zhǔn)中,Sequence Container的erase函數(shù)會(huì)返回iterator,但Associative Container不返回iterator。所以在小節(jié)2、小節(jié)3中使用map1.erase(it++)
而不是直接map1.erase(it)
。
五、總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)我們的支持。
欄 目:C語言
下一篇:C語言文件操作中 fgets與fputs 函數(shù)詳解
本文標(biāo)題:C++如何刪除map容器中指定值的元素詳解
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1454.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言沒有round函數(shù) round c語言
- 01-10如何判斷一個(gè)數(shù)是否為2的冪次方?若是,并判斷出來是多少次方
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10如何判斷一個(gè)數(shù)是否為4的冪次方?若是,并判斷出來是多少次方
- 01-10如何查看進(jìn)程實(shí)際的內(nèi)存占用情況詳解
- 01-10c++中inline的用法分析
- 01-10如何尋找數(shù)組中的第二大數(shù)
- 01-10用C++實(shí)現(xiàn)DBSCAN聚類算法


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子