Как отсортировать map по значению c
Перейти к содержимому

Как отсортировать map по значению c

  • автор:

Как отсортировать map по значению c

Здравствуйте Акул, Вы писали:

А>Доброго времени суток!
А>простенький вопрос, каким образом отсортировать map по значению? (по float-у)

Никаким. map — контейнер, отсортированный по значению ключа.

Алексей Кирдин
Re[2]: как сортировать map по значению

От: Акул www.kyrs.ru
Дата: 28.05.02 13:01
Оценка:

Здравствуйте Kaa, Вы писали:

Kaa>Здравствуйте Акул, Вы писали:

А>>Доброго времени суток!
А>>простенький вопрос, каким образом отсортировать map по значению? (по float-у)

Kaa>Никаким. map — контейнер, отсортированный по значению ключа.

а существует контейнер, который отсортирован по значению?

Re[3]: как сортировать map по значению

От: Bell
Дата: 28.05.02 13:06
Оценка:

Здравствуйте Акул, Вы писали:

А>а существует контейнер, который отсортирован по значению?
std::set
Варианты:
Нужные значения из map добавляешь в новый set, в результате получаешь отсортированные значения.
Можно все это запихать в vector, и потом применить к нему алгоритм std::sort

Любите книгу — источник знаний (с) М.Горький
Re[4]: как сортировать map по значению

От: Акул www.kyrs.ru
Дата: 28.05.02 13:12
Оценка:

Здравствуйте Bell, Вы писали:

B>Здравствуйте Акул, Вы писали:

А>>а существует контейнер, который отсортирован по значению?
B>std::set
B>Варианты:
B>Нужные значения из map добавляешь в новый set, в результате получаешь отсортированные значения.
B>Можно все это запихать в vector, и потом применить к нему алгоритм std::sort

но это уже будет не map.

Re[5]: как сортировать map по значению

От: Kaa http://blog.meta.ua/users/kaa/
Дата: 28.05.02 13:22
Оценка:

Здравствуйте Акул, Вы писали:

А>но это уже будет не map.
Ты лучше объясни, что тебе надо сделать. Все это, я считаю, от неправильного понимания задачи.

Если что-то упорядочено, то оно упорядочено по ключу. Если тебе нужен порядок по значению ключа, значит, надо пересортировать контейнер, в котором ключем теперь является бывшее значение, а то, что было ключем, стало значением.

Если тебе одновременно надо 2 отношения порядка на одних и тех же данных, тогда можно создать объект-дескриптор (читай умный указатель с подсчетом ссылок), который будет на самом деле владеть данными, а в контейнерах сохранять его копии, и для каждого из 2-х контейнеров указать свой способ сортировки.

При этом:
Данные будут храниться 1 раз, а в контейнерах будет дублироваться указатель на эти данные.
В каждом из контейнеров будет свой порядок (в одном ключем будет твой первоначальный ключ, в другом — твое первоначатльное значение)

Так зачем тебе нужна двойная сортировка?

Алексей Кирдин
Re[6]: как сортировать map по значению

От: Акул www.kyrs.ru
Дата: 29.05.02 05:12
Оценка:

Здравствуйте Kaa, Вы писали:

Kaa>Здравствуйте Акул, Вы писали:

А>>но это уже будет не map.
Kaa>Ты лучше объясни, что тебе надо сделать. Все это, я считаю, от неправильного понимания задачи.

Kaa>Если что-то упорядочено, то оно упорядочено по ключу. Если тебе нужен порядок по значению ключа, значит, надо пересортировать контейнер, в котором ключем теперь является бывшее значение, а то, что было ключем, стало значением.

Kaa>Если тебе одновременно надо 2 отношения порядка на одних и тех же данных, тогда можно создать объект-дескриптор (читай умный указатель с подсчетом ссылок), который будет на самом деле владеть данными, а в контейнерах сохранять его копии, и для каждого из 2-х контейнеров указать свой способ сортировки.

Kaa>При этом:
Kaa>Данные будут храниться 1 раз, а в контейнерах будет дублироваться указатель на эти данные.
Kaa>В каждом из контейнеров будет свой порядок (в одном ключем будет твой первоначальный ключ, в другом — твое первоначатльное значение)

Kaa>Так зачем тебе нужна двойная сортировка?

Двойная сортировка не нужна, я возможно map не по его прямому назначению использую. Задача простая: есть набор GUID-дов (ключ) со своими значениями, нада найти GUID с максимальным значением, обработать это значение и удалить из map, взять следующий GUID с максимальным значением и т.д.
Задача легко решается из без map, но с ним удобней данные по GUID-дам собирать.

Сортировка карты по значениям в C++

В этом посте мы обсудим, как сортировать карту по значениям в C++.

Мы знаем, что std::map По умолчанию контейнер сортирует свои элементы по ключам, а не по значениям. В этом посте представлен обзор некоторых доступных альтернатив для достижения этой цели.

1. Использование std::vector функция

Идея состоит в том, чтобы преобразовать std::map в std::vector пар ключ-значение и отсортируйте этот vector в порядке возрастания второго значения его пары.

Как отсортировать map по значению?

Нужно отсортировать меп, подскажить как это сделать найболее удобным образом. Ибо гугл подсказывает очень заумные вещи или очень простые, может обитатели тостера поделяться золотой срединой (наработаными хаками).

  • Вопрос задан более трёх лет назад
  • 1521 просмотр

Комментировать

Решения вопроса 1

Вопрос не имеет смысла, так как map хранит сортированно по ключу (возможен кастомный компаратор) и не позволяет менять этот порядок. Так что по значению — никак. Доставайте оттуда пары, да сортируйте. Какая задача вообще решается?

Ответ написан более трёх лет назад

Нравится 2 1 комментарий

Fraideron

Валерий Демидов @Fraideron Автор вопроса

Алгоритм Хафмана реализовывал, потом понял, что просто list можно использовать. Спасибо за ответ.

Как отсортировать std::map<> по ключу?

Должно быть всегда отсортированно и так. map — бинарное дерево.

#2
14:39, 24 ноя 2003

for ( std::mapcmpchar_t, mystruct_t>::iterator i= structmap.begin( ); //как много слов. Лучше пользоваться typedef i!= structmap.end( ); ++i; ) < std::cout i->first ' ' i->second std::endl; >

map будет выведен в порядке возрастания i->first (ну, если оператор
#3
15:54, 24 ноя 2003

Семен
_Winnie
Ой, точно отсортированным получается. Правда, кто его просит сортировать-то?
Разве бинарное дерево не может быть неотсортированным? Т. е. в этом случае мне как раз
так и нужно, а если нужно получать элементы в том порядке, в каком они были вставлены?

#4
15:57, 24 ноя 2003

У него в свойствах прописан поиск за логарифмическое время. Потому и должен.

#5
16:02, 24 ноя 2003

Джо
>[i]а если нужно получать элементы в том порядке, в каком они были вставлены[/i]
Для этого можно использовать реализацию hash_map. Найти ее можно, например в STLport.

#6
17:29, 24 ноя 2003

Как отсортировать карту?
.
кто его просит сортировать-то?

User
в 7.1 есть

#7
22:53, 24 ноя 2003

Блин. вот невезуха. когда преподу написал прогу с использованием STL он на меня на орал. он сам выше чистого C не знает.

#8
16:13, 25 ноя 2003

Во дает. А по поводу чего орал? А шаблоны запрещал использовать? Правда, если у вас практикум по С, а не по С++, то справедливо орал.

#9
16:13, 25 ноя 2003

doig-u
Да, смешно, особенно если я не предполагал, что оно должно сортироваться автоматом из-за,
как сказал Семён
>У него в свойствах прописан поиск за логарифмическое время.
Так что можешь ржать и дальше 🙂

stalkerg
Препод — наверное из команды «Старых пердунов-консерваторов».

Всем за помощь спасибо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *