How can I get keys set from map or unordered_map in c++?

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();

Ответы (2 шт):

Автор решения: Chorkov

В С++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;
→ Ссылка
Автор решения: Evgenii Izhboldin

Вроде у 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);  
} 
→ Ссылка