Как выбрать k верхних элементов из std::mapC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как выбрать k верхних элементов из std::map

Сообщение Anonymous »

У меня есть std::map с uint32_t в качестве типа ключа и пользовательского типа значения. Я хочу выбрать из этой карты верхние пары значений k на основе членов типа значения. Для этого я сначала копирую все элементы std::map в std::vector, а затем сортирую вектор. Наконец, я удаляю все элементы вектора с индексами больше k. Вот мой код:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

struct Values
{
uint32_t a = 0;
uint32_t b = 0;

Values(uint32_t x, uint32_t y): a(x), b(y) {}
};

template 
auto print_top_k(std::size_t k, MapType&& map)
{
std::vector v;
v.reserve(map.size());

std::transform(map.begin(), map.end(), std::back_inserter(v), [](const auto& kv) { return kv; });
std::sort(v.begin(), v.end(), [](const auto& lhs, const auto& rhs){ return lhs.second.a > rhs.second.b; });
v.erase(v.begin() + k, v.end());

for(const auto& kv: v)
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79382676/how-to-pick-top-k-elements-from-stdmap[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»