2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
1

Сортировка map по значению

25.06.2017, 22:37. Показов 7332. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть некий map:
C++
1
map<string, int> MyMap;
Нужно вывести на экран всё содержимое контейнера в порядке наибольшего значения. После чего сам контейнер не нужен.
Как это лучше сделать???


Добавлено через 4 минуты
Мб находить максимальный элемент, вывести его и удалить с контейнера, после искать заново? Как это прописать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2017, 22:37
Ответы с готовыми решениями:

Сортировка map по значению
Добрый день:) Как можно отсортировать map по возрастанию/убыванию float(неважно ключ это или...

Сортировка map по значению
Здорова господа!!! Есть массив: map&lt;string, int&gt; m; m=3; m=2; m=10; Нужно найти...

Сортировка map по ключу и значению
Всем привет. Я создаю map и добавляю туда элементы: map&lt;int,string&gt; m; m=&quot;a&quot;; m=&quot;c&quot;; m=&quot;b&quot;; ...

Сортировка map по значению (c заковыкой)
А вот и она. Значение это класс: class Info { public: Info (string _address, string...

27
80 / 77 / 8
Регистрация: 19.06.2015
Сообщений: 126
25.06.2017, 22:47 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <map>
 
int main ()
{
  std::map< std::string,int> mymap;
 
  mymap["b"] = 100;
  mymap["a"] = 200;
  mymap["c"] = 300;
 
  // show content:
  for (std::map< std::string,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
    std::cout << it->first << " => " << it->second << '\n';
 
  return 0;
}
http://www.cplusplus.com/reference/map/map/begin/
0
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
25.06.2017, 22:52  [ТС] 3
Цитата Сообщение от Lovc Посмотреть сообщение
http://www.cplusplus.com/reference/map/map/begin/
Шутка такая? Это обычный вывод контейнера.
0
80 / 77 / 8
Регистрация: 19.06.2015
Сообщений: 126
25.06.2017, 22:52 4
Насчет сортировки тут почитай.
https://stackoverflow.com/ques... t-by-value
1
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
25.06.2017, 23:50  [ТС] 5
В итоге сделал реверсной проход по контейнеру, на каждой итерации создавал новые пары (прошлые ключи стали значениями и наоборот) и вставлял эти пары в std::multimap<int, string>. Таким образом сохранилась нужная мне сортировка контейнера std::map<string, int> для строк с одинаковым ключом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    std::map<std::string, size_t> paths = {};
//....
    multimap<int, string> sortedPaths = {};
//....
    for(auto it = paths.rbegin(); it != paths.rend(); ++it)
    {
        int key = (*it).second;
        string val = (*it).first;
        sortedPaths.insert(std::pair<int, string>(key, val));
    }
 
//вывод
        for(auto it = sortedPaths.rbegin(); it != sortedPaths.rend(); ++it)
            cout << " " << (*it).first << " " << (*it).second << endl;
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
26.06.2017, 01:19 6
Всё ещё не можешь решить задачу для unigine?
0
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
26.06.2017, 01:50  [ТС] 7
Цитата Сообщение от DevAlone Посмотреть сообщение
Всё ещё не можешь решить задачу для unigine?
Так вот решил. Нужно же было успеть к 24:00, как я понял. Ели успел.
Не знаю насколько правильно. Вряд ли зачислят меня, но я старался=)
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
26.06.2017, 02:16 8
Вообще там можно было просто перекинуть всё в вектор, отсортировать и оставить N значений. Городить ещё один map, тем более multimap ни к чему.
1
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
26.06.2017, 02:40  [ТС] 9
Цитата Сообщение от DevAlone Посмотреть сообщение
Вообще там можно было просто перекинуть всё в вектор, отсортировать и оставить N значений. Городить ещё один map, тем более multimap ни к чему.
Не было времени думать рационально. Уже как есть)
0
Вездепух
Эксперт CЭксперт С++
11087 / 6054 / 1652
Регистрация: 18.10.2014
Сообщений: 15,197
26.06.2017, 04:12 10
Цитата Сообщение от Tyson Fury Посмотреть сообщение
Нужно вывести на экран всё содержимое контейнера в порядке наибольшего значения.
Значения чего? У вас в map пары <string, int>. О каком "значении" идет речь?
0
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
26.06.2017, 04:46  [ТС] 11
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
У вас в map пары <string, int>. О каком "значении" идет речь?
string - ключ, int - значение.
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 30
26.06.2017, 10:17 12
Копируете map в vector<pair<string,int>> и сортируйте по значению
C++
1
2
3
sort(v.begin(),v.end(),[](const pair<string,int> &a,const pair<string,int> &b){
          a.second<b.second;
});
1
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.06.2017, 11:34 13
Tyson Fury, юзать boost.multimap
Создавать вектор пар и сортировать их по нужному критерию.
Подумать вообще о целесообразности сортировки по ключу.
1
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
26.06.2017, 12:40 14
Цитата Сообщение от Peoples Посмотреть сообщение
и сортируйте по значению
почти. по заданию при одинаковой частоте, строки должны быть упорядочены по убыванию.

Цитата Сообщение от MrGluck Посмотреть сообщение
юзать boost.multimap
там разрешается использовать сам с++ и stl
0
Любитель чаепитий
3741 / 1798 / 565
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
26.06.2017, 12:48 15
почему никто не предложил такой вариант?
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <map>
#include <algorithm>
 
int main()
{
    std::map<std::string, int> m1;
    std::map<int, std::string> m2;
    
    std::transform(m1.begin(), m1.end(), std::inserter(m2, m2.end()), [] (const std::pair<const std::string, int> & p) { return std::make_pair(p.second, p.first); });
}
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
26.06.2017, 12:55 16
Цитата Сообщение от MrGluck Посмотреть сообщение
Подумать вообще о целесообразности сортировки по ключу.
Там надо было парсить лог и записывать в map количество вхождений одинаковых урлов, поэтому map там нужен(можно заменить разве что на unordered_map).
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.06.2017, 12:57 17
GbaLog-, потому что он ничем не лучше
Цитата Сообщение от MrGluck Посмотреть сообщение
Создавать вектор пар и сортировать их по нужному критерию.
Добавлено через 33 секунды

Не по теме:

Забейте вы на эту недошколу

0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
26.06.2017, 13:08 18
Цитата Сообщение от GbaLog- Посмотреть сообщение
почему никто не предложил такой вариант?
нет гарантий, что все инты будут одинаковыми
0
Любитель чаепитий
3741 / 1798 / 565
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
26.06.2017, 13:15 19
ну std::multimap.
0
What a waste!
1607 / 1299 / 180
Регистрация: 21.04.2012
Сообщений: 2,727
26.06.2017, 13:22 20
Цитата Сообщение от GbaLog- Посмотреть сообщение
почему никто не предложил такой вариант?
Как уже тут писали, зачем map, если нужно просто упорядочить? vector + [partial_]sort достаточно.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2017, 13:22
Помогаю со студенческими работами здесь

Сортировка std::map по значению
имеется вот такой вот тип: typedef struct { char domain; set&lt;uint32_t&gt; unique_ip;...

Сортировка map по значению int в порядке убывания и частично по ключу char :)
Добрый день. Помогите, пожалуйста, отсортировать std::map &lt;char, int&gt; a. Например, у меня есть...

Выборка map/unordered_map по значению
Добрый вечер товарищи. Я тут уже неделю мучаю голову по поводу одной &quot;глобальной&quot; задачи, из-за...

Map: обращение к значению (класс) через []
Всем добрый день. Подскажите пожалуйста почему в 14 строчке без пустого конструктора пример не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru