Найти и удалить unique_ptr с карты - PullRequest
0 голосов
/ 22 марта 2020

У меня есть map<std::string, std::unique_ptr<Cls>> my_map. Я хотел бы переместить некоторое значение из этой карты, чтобы иметь следующее:

std::unique_ptr<Cls> cls = my_map.get_and_erase("some str");

erase не возвращает значение, к сожалению. Какой мой лучший подход здесь?

Ответы [ 2 ]

4 голосов
/ 22 марта 2020

Начиная с C ++ 17 у вас есть std::map::extract:

// if the key exists in the map, it'll be deleted after this:
auto cls_node =  my_map.extract("some str");

if(not cls_node.empty()) // cls_node.value() gives access to the value
4 голосов
/ 22 марта 2020

Вы можете использовать следующий алгоритм:

  • Используйте find, чтобы получить итератор для элемента.
  • Переход от элемента.
  • Стереть, используя итератор.
...