STLマップからキーを削除したいのですが。ただし、 map.erase()
何もしません。これをどうやってやるの?
107874 次
2 に答える
94
それはあなたがそれをどのように呼んでいるかに完全に依存しますが、first,last
オプションを使用している可能性があります。そうである場合は、 からfirst
までで を除く last
要素が消去されることに注意する必要があります。そのルールに従えば、反復子ベースの削除は、単一の要素または範囲として正常に機能するはずです。
キーで消去している場合は、もちろんキーがそこにあると仮定して、それも機能するはずです。
次のサンプル コードは、3 つのメソッドすべての動作を示しています。
#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;
}
出力:
c => C
d => D
于 2012-04-06T04:08:17.383 に答える
13
最初にイテレータを見つける必要があります
map.erase( ITERATOR ) ;
ただし、これを安全にするには、ITERATOR が存在することを確認する必要があります。例:
#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" ) ;
}
于 2013-12-20T19:34:45.820 に答える