979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
1

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

12.11.2013, 11:35. Показов 12007. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здорова господа!!!

Есть массив:
C++
1
2
3
4
map<string, int> m;
m["one"]=3;
m["two"]=2;
m["three"]=10;
Нужно найти максимальный элемент массива? Пытаюсь найти алгоритм в СТЛ, нашол max_element() но она возвращает из последовательности по ключу, а мне нужно по значению или она вообще не сортирует.
Ничо так и не нашол подходящего в алгоритмах, от щас сделаю сортировку в ручную, а мб все таки есть функция с помощью которой можно б было получить максимальный элемент? Ну например отсортировать map по значению, а потом типо m.begin() максимальный, а m.end()-1 минимальный?

Добавлено через 12 минут
От например в пхп была функция которой передаешь ассоциативный массив и на выходе получаешь новый массив у которого ключи становятся значениями, а значения ключами, удобно так сказать, а в С++ какие то убогие ассоциативные массивы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2013, 11:35
Ответы с готовыми решениями:

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

Сортировка map по значению
Есть некий map: map&lt;string, int&gt; MyMap; Нужно вывести на экран всё содержимое контейнера в...

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

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

11
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
12.11.2013, 11:37 2
ninja2, покажите как вы применяли max_element() для map.
1
Заблокирован
12.11.2013, 11:41 3
Цитата Сообщение от ninja2 Посмотреть сообщение
Ну например отсортировать map по значению
map в STL нельзя отсортировать. Он изначально отсортирован по ключу и в него встроен find. В бусте было что то подобное...

Добавлено через 1 минуту
Используй вектор на
C++
1
std::pair
и сортируй как хочешь
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.11.2013, 11:41 4
Юзай boost::bimap http://www.boost.org/doc/libs/... index.html
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
12.11.2013, 11:44  [ТС] 5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
ninja2, покажите как вы применяли max_element() для map.
Отак:
C++
1
map<string,int>::iterator it=max_element(m.begin(),m.end());
Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
Да ладно мне всего раз map использовать нада, это я так узнать мб я функцию не нашол, гуглил вроде ничего нету.
0
Заблокирован
12.11.2013, 11:47 6
Цитата Сообщение от ninja2 Посмотреть сообщение
Да ладно мне всего раз map использовать нада
я же говорю, используй
C++
1
std::vector<std::pair<KEY,VALUE>>
и сортируй по чему угодно и как угодно.
Можешь для загонки в вектор уникальных элементов использовать map - но это изврат. Для уникальных элементов вектора используй std::unique_copy
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
12.11.2013, 11:48  [ТС] 7
Цитата Сообщение от newbie666 Посмотреть сообщение
map в STL нельзя отсортировать. Он изначально отсортирован по ключу и в него встроен find. В бусте было что то подобное...
Ок! Значит в ручную найду максимальный элемент.
0
Эксперт по математике/физикеЭксперт С++
2016 / 1344 / 383
Регистрация: 16.05.2013
Сообщений: 3,470
Записей в блоге: 6
12.11.2013, 11:55 8
В STL алгоритм max_element определен также с явным вызовом пользовательского функтора:
C++
1
2
3
4
5
  template<typename _ForwardIterator, typename _Compare>
    _ForwardIterator
    max_element(_ForwardIterator __first, _ForwardIterator __last,
        _Compare __comp)
...
Этот алгоритм будет работать с отображениями так как их итераторы двунаправленные.
Пишите свой функтор и будет вам счастие.
Не понимаю почему тут начинают городить огород. Впринципе ничего сложного.
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
12.11.2013, 11:58  [ТС] 9
Цитата Сообщение от Ilot Посмотреть сообщение
Этот алгоритм будет работать с отображениями так как их итераторы двунаправленные.
Пишите свой функтор и будет вам счастие. Впринципе ничего сложного.
Да проще цикл свой написать:
C++
1
2
3
4
5
6
7
map<string,int>::iterator it=m.begin(),it_max=it;
                    for(it;it!=m.end();++it)
                    {
                        if(it->second>it_max->second)
                            it_max=it;
                        cout <<it->first<<" - "<<it->second<<endl;
                    }
0
Заблокирован
12.11.2013, 11:59 10
Цитата Сообщение от ninja2 Посмотреть сообщение
Ок! Значит в ручную найду максимальный элемент.
Я сказал, что map сортировать нельзя, а найти максимальный элемент можно:
C++
1
2
3
4
5
6
7
8
9
10
11
std::map<std::string, int> m;
m["one"]=3;
m["two"]=2;
m["three"]=10;
 
std::cout << std::max_element(m.begin(), m.end(),
        [](const std::pair<std::string, int> A, const std::pair<std::string, int> B)
            {
                return A.second < B.second;
            }
             )->second << std::endl;
Код неказистый, лень было нормально форматировать. Но делается это именно так
1
Ilot
12.11.2013, 12:03
  #11

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
Да проще цикл свой написать:
Ага точно. А еще проще самому написать весь STL чем просто открыть заголовочники и посмотреть, что там написанно. :scratch:

0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
12.11.2013, 12:08  [ТС] 12
Цитата Сообщение от newbie666 Посмотреть сообщение
Код неказистый, лень было нормально форматировать. Но делается это именно так
Ок норм код. Твою версию буду использовать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2013, 12:08
Помогаю со студенческими работами здесь

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

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

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

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


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

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

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