Вопрос закрыт, так как на Stack Overflow на русском вопросы принято задавать только на русском языке. Пожалуйста, переведите ваш вопрос на русский язык или воспользуйтесь Stack Overflow на английском.
Закрыт 1 год назад.
I want to get all keys from a collection, is there a standard way to do this?
std::unordered_map<std::string, size_t> map;
auto keys = map.get_keys();
В С++20 есть такая возможность:
auto keys= map | std::views::keys;
Для более старых версий стандарта, можно воспользоваться boost.
Однако, обращаю внимание, что keys - не самостоятельная коллекция, а адаптр к существующему map-у, и его содержимое будет меняться с изменением исходного контейнера, (итераторы будут инвалидироваться и т.д.):
std::unordered_map<int,int> map={{1,2},{3,4},{5,6}};
auto keys= map|boost::adaptors::map_keys;
map.erase(3);
for( auto i : keys )
std::cout<< i << std::endl;
Вроде у map и unordered_map нету методов (по крайней мере в С++14, С++17), что бы сразу получить коллекцию ключей, можете попробовать сами через итерацию по парам ключ-значение:
std::vector<Key> keys;
keys.reserve(map.size());
std::vector<Val> vals;
vals.reserve(map.size());
for(auto kv : map) {
keys.push_back(kv.first);
vals.push_back(kv.second);
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей