Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
12.11.2013, 11:35     Сортировка map по значению #1
Здорова господа!!!

Есть массив:
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 минут
От например в пхп была функция которой передаешь ассоциативный массив и на выходе получаешь новый массив у которого ключи становятся значениями, а значения ключами, удобно так сказать, а в С++ какие то убогие ассоциативные массивы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,334
Завершенные тесты: 1
12.11.2013, 11:37     Сортировка map по значению #2
ninja2, покажите как вы применяли max_element() для map.
newbie666
Заблокирован
12.11.2013, 11:41     Сортировка map по значению #3
Цитата Сообщение от ninja2 Посмотреть сообщение
Ну например отсортировать map по значению
map в STL нельзя отсортировать. Он изначально отсортирован по ключу и в него встроен find. В бусте было что то подобное...

Добавлено через 1 минуту
Используй вектор на
C++
1
std::pair
и сортируй как хочешь
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.11.2013, 11:41     Сортировка map по значению #4
Юзай boost::bimap http://www.boost.org/doc/libs/1_54_0...tml/index.html
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
12.11.2013, 11:44  [ТС]     Сортировка map по значению #5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
ninja2, покажите как вы применяли max_element() для map.
Отак:
C++
1
map<string,int>::iterator it=max_element(m.begin(),m.end());
Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
Да ладно мне всего раз map использовать нада, это я так узнать мб я функцию не нашол, гуглил вроде ничего нету.
newbie666
Заблокирован
12.11.2013, 11:47     Сортировка map по значению #6
Цитата Сообщение от ninja2 Посмотреть сообщение
Да ладно мне всего раз map использовать нада
я же говорю, используй
C++
1
std::vector<std::pair<KEY,VALUE>>
и сортируй по чему угодно и как угодно.
Можешь для загонки в вектор уникальных элементов использовать map - но это изврат. Для уникальных элементов вектора используй std::unique_copy
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
12.11.2013, 11:48  [ТС]     Сортировка map по значению #7
Цитата Сообщение от newbie666 Посмотреть сообщение
map в STL нельзя отсортировать. Он изначально отсортирован по ключу и в него встроен find. В бусте было что то подобное...
Ок! Значит в ручную найду максимальный элемент.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
12.11.2013, 11:55     Сортировка map по значению #8
В STL алгоритм max_element определен также с явным вызовом пользовательского функтора:
C++
1
2
3
4
5
  template<typename _ForwardIterator, typename _Compare>
    _ForwardIterator
    max_element(_ForwardIterator __first, _ForwardIterator __last,
        _Compare __comp)
...
Этот алгоритм будет работать с отображениями так как их итераторы двунаправленные.
Пишите свой функтор и будет вам счастие.
Не понимаю почему тут начинают городить огород. Впринципе ничего сложного.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
12.11.2013, 11:58  [ТС]     Сортировка map по значению #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;
                    }
newbie666
Заблокирован
12.11.2013, 11:59     Сортировка map по значению #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;
Код неказистый, лень было нормально форматировать. Но делается это именно так
Ilot
12.11.2013, 12:03
  #11

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2013, 12:08     Сортировка map по значению
Еще ссылки по теме:

Сортировка в map C++
Map контейнер сортировка C++
C++ Map: обращение к значению (класс) через []

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

Или воспользуйтесь поиском по форуму:
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
12.11.2013, 12:08  [ТС]     Сортировка map по значению #12
Цитата Сообщение от newbie666 Посмотреть сообщение
Код неказистый, лень было нормально форматировать. Но делается это именно так
Ок норм код. Твою версию буду использовать.
Yandex
Объявления
12.11.2013, 12:08     Сортировка map по значению
Ответ Создать тему
Опции темы

Текущее время: 19:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru