Перейти к содержимому

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

  • автор:

Как отсортировать 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
Препод — наверное из команды «Старых пердунов-консерваторов».

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

Как отсортировать 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-дам собирать.

Map в C++: что это и как с этим работать

обложка статьи

В данном уроке мы разберем еще один часто используемый контейнер STL — map.

Что такое map

Это ассоциативный контейнер, который работает по принципу — [ключ — значение]. Он схож по своему применению с вектором и массивом, но есть некоторые различия:

    Ключом может быть все что угодно. От обычной переменной до класса.

mp1[0] = 7; // ключ - число mp2["zero"] = 4; // ключ - строка pair int, int> p = make_pair(1, 3); mp3[p] = 3; // ключ - пара

map ключ c++

Мы можем создать ключ из любых компонентов и он будет — рабочим.

Поэтому можно с легкостью сделать словарь:

  • Ключом в нашем случае будет — русское слово.
  • А значением — английское.
map string, string> mp; mp["привет"] = "hi";

Добавление, удаление, обращение к элементам происходит за log n. n — в нашем случае размер контейнера.

Как создать map

Сперва понадобится подключить соответствующую библиотеку:

#include 

Чтобы создать map нужно воспользоваться данной конструкцией:

map  L>, R> > имя>;
  • — этот тип данных будет относиться к значению ключа.
  • — этот тип данных соответственно относится к значению.
map string, int> mp; // пример
  • Ключ — строка.
  • Значение — число.

При создании map все его элементы будут иметь значение нуля.

Такж

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

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