История изменений
Исправление rumgot, (текущая версия) :
Вот это потому, что как в анекдоте:
«Я же говорил, что врач должен быть внимательным: я ведь засовывал палец один, а облизывал другой…»
Нужно так:
std::map<std::string, int> counters = { {"hello", 5}, {"world", 5} };
std::vector<std::string_view> keys;
keys.reserve(counters.size());
std::transform(std::begin(counters),
std::end(counters),
std::back_inserter(keys),
[](const std::pair<const std::string, int>& item) -> std::string_view {
return item.first;
});
for (std::string_view k : keys) {
std::cout << k << "\n";
}
Потому что из описания std::map
:
value_type std::pair<const Key, T>
Т.е. в твоем случае ты копируешь пару внутри лямбды и возвращаешь string_view
, который указывает на скопированную временную переменную.
Исправление rumgot, :
Вот это потому, что как в анекдоте:
«Я же говорил, что врач должен быть внимательным: я ведь засовывал палец один, а облизывал другой…»
Нужно так:
std::map<std::string, int> counters = { {"hello", 5}, {"world", 5} };
std::vector<std::string_view> keys;
keys.reserve(counters.size());
std::transform(std::begin(counters),
std::end(counters),
std::back_inserter(keys),
[](const std::pair<const std::string, int>& item) -> std::string_view {
return item.first;
});
for (std::string_view k : keys) {
std::cout << k << "\n";
}
Потому что из описания std::map
:
value_type std::pair<const Key, T>
Т.е. в твоем случае ты копируешь пару внутри лямбды и возвращаешь string_view, который указывает на скопированную временную переменную.
Исходная версия rumgot, :
Вот это потому, что как в анекдоте:
«Я же говорил, что врач должен быть внимательным: я ведь засовывал палец один, а облизывал другой…»
Нужно так:
std::map<std::string, int> counters = { {"hello", 5}, {"world", 5} };
std::vector<std::string_view> keys;
keys.reserve(counters.size());
std::transform(std::begin(counters),
std::end(counters),
std::back_inserter(keys),
[](const std::pair<const std::string, int>& item) -> std::string_view {
return item.first;
});
for (std::string_view k : keys) {
std::cout << k << "\n";
}
Потому что из описания std::map
:
value_type std::pair<const Key, T>
Т.е. в твоем случае ты копируешь пару внутри лямбды и возвращаешь string_view, который указывает на скопированную временную переменную.