2012-04-06 16 views
32

STLマップからキーを削除したいと思います。しかし、map.erase()は何もしません。 どうすればいいですか?C++マップからキーを削除

+11

何か消去します。どうやって使ってるの?それが何もしていないとあなたが信じさせるのは何ですか? –

+1

map.erase(key)。 –

+3

私の2番目の質問に? –

答えて

50

これは電話の方法によって異なりますが、first,lastオプションを使用しているようです。もしあなたがそうであるならば、それはfirstから始めて、lastを除く)まで要素を消去することを覚えておく必要があります。このルールに従えば、イテレータベースの削除は、単一の要素または範囲のいずれかとしてうまくいくはずです。

キーで消去している場合は、キーが当然存在するものと仮定しても機能します。出力

#include <iostream> 
#include <map> 

int main (void) { 
    std::map<char,char> mymap; 
    std::map<char,char>::iterator it; 

    mymap['a'] = 'A'; mymap['b'] = 'B'; mymap['c'] = 'C'; 
    mymap['d'] = 'D'; mymap['e'] = 'E'; mymap['f'] = 'F'; 
    mymap['g'] = 'G'; mymap['h'] = 'H'; mymap['i'] = 'I'; 

    it = mymap.find ('b');    // by iterator (b), leaves acdefghi. 
    mymap.erase (it); 

    it = mymap.find ('e');    // by range (e-i), leaves acd. 
    mymap.erase (it, mymap.end()); 

    mymap.erase ('a');     // by key (a), leaves cd. 

    mymap.erase ('z');     // invalid key (none), leaves cd. 

    for (it = mymap.begin(); it != mymap.end(); it++) 
     std::cout << (*it).first << " => " << (*it).second << '\n'; 

    return 0; 
} 

次のサンプルコードは、動作中のすべての3つのメソッドを示し

c => C 
d => D 
+0

私は 'const key_type&'のオーバーライドを見逃してしまったので気が気になりません。それを指摘してくれてありがとう! –

4

あなたはイテレータを見つけるしなければならないの最初

map.erase(ITERATOR) ; 

へこれを安全にするには、ITERATしかし、ORは存在する。例:

#include <stdio.h> 
#include <map> 
using namespace std ; 

int main() 
{ 
    map<int,int> m ; 
    m.insert(make_pair(1,1)) ; 
    map<int,int>::iterator iter = m.find(1) ; 
    if(iter != m.end()) 
    m.erase(iter); 
    else puts("not found") ; 

} 
関連する問題