2017-02-14 3 views
-1

Я имею следующую карту,Как удалить запись с карты std :: map с помощью клавиши?

struct details; 

map<std::string, details> myMap; 

myMap.erase(“key”);// Why I cant do this in C++11? 

Это так просто в Java

Map<std::string, details> map 
map.remove(“key"); 

Как я могу удалить запись из станд :: карты, используя ключ?

Благодаря

+0

Что вы имеете в виду, вы можете «т? Что именно вас останавливает? 'myMap.erase (« ключ »);' должен работать нормально. Обратите внимание, что у вас есть привлекательные фигурные кавычки '' '', где регулярные кавычки '' '' должны быть - может быть, это ваша проблема? –

+0

На самом деле вы можете. Какое конкретное сообщение об ошибке вы получили? – KonstantinL

+0

Я получаю ошибку компилятора, нет соответствующего конструктора для вызова erase – Kid

ответ

0

Согласно онлайн документации для std::map::erase, в 3-й форме, она может быть вызвана непосредственно с помощью ключа. Проверка на моем компиляторе clang, с C++ 98 или C++ 14 в качестве стандартов, и как заголовочные файлы map, так и string, он компилируется отлично. Я получил ошибки, хотя если заголовочный файл string не был включен, возможно, поэтому он не работает для вас.

В любом случае, в качестве альтернативы, вы можете использовать метод find на строку, чтобы получить итератор, который затем может быть использован с методом erase как так:

myMap.erase(myMap.find("key")); 
+0

Btw вы также можете использовать 'pop (...)', если элемент, который нужно удалить, нужно обрабатывать дальше по строке. – rbaleksandar

+0

Этот вопрос был дан ответ уже. См. Комментарии. Спасибо, в любом случае. – Kid

Смежные вопросы