Подтвердить что ты не робот

Удаление ключа с карты С++

Я хотел бы удалить ключ с карты STL. Однако map.erase() ничего не делает. Как я буду делать это

4b9b3361

Ответ 1

Все зависит от того, как вы его вызываете, но похоже, что вы можете использовать опцию 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;
}

который выводит:

c => C
d => D

Ответ 2

Вам нужно будет сначала найти итератор

map.erase( 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" ) ;

}