Есть ли встроенный метод, который удаляет и элемент (т. Е. От карты, заданной ключом) и возвращает удаленный элемент?C++: удалить элемент из контейнера и вернуть его
0
A
ответ
0
Для этого не существует встроенного метода, однако вы можете сохранить элемент, обратившись к нему, а затем удалите его. Для стирания требуется указать ключ. Если это мульти-карта, вы должны удалить ее с помощью позиции.
0
Вот функция, которую вы можете использовать (C++ 11):
#include <iostream>
#include <map>
template<typename T>
typename T::mapped_type removeAndReturn(T& mp, const typename T::key_type& val) {
auto it = mp.find(val);
auto value = std::move(it->second);
mp.erase(it);
return value;
}
int main() {
std::map<int, int> m;
m[3] = 4;
std::cout << "Map is empty: " << std::boolalpha << m.empty() << std::endl;
std::cout << "Value returned: " << rm_and_return(m, 3) << std::endl;
std::cout << "Map is empty: " << std::boolalpha << m.empty() << std::endl;
}
Выход:
Map is empty: false
Value returned: 4
Map is empty: true
Используйте [ 'at'] (http://en.cppreference.com/ w/cpp/container/map/at) для доступа к элементу, затем ['erase'] (http://en.cppreference.com/w/cpp/container/map/erase), чтобы удалить его (по его позиции) из контейнер. – 0x499602D2
@ 0x499602D2 1. Я еще не использую C++ 11. 2. Это то, что я прошу, если мне нужно это сделать, если вы точно это знаете, вы можете добавить его в качестве ответа. – Subway