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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

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

12.11.2013, 11:35. Просмотров 2546. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2013, 11:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка map по значению (C++):

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

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

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

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

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

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

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

Добавлено через 1 минуту
Используй вектор на
C++
1
std::pair
и сортируй как хочешь
1
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
12.11.2013, 11:41 #4
Юзай boost::bimap http://www.boost.org/doc/libs/1_54_0/libs/bimap/doc/html/index.html
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
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
newbie666
Заблокирован
12.11.2013, 11:47 #6
Цитата Сообщение от ninja2 Посмотреть сообщение
Да ладно мне всего раз map использовать нада
я же говорю, используй
C++
1
std::vector<std::pair<KEY,VALUE>>
и сортируй по чему угодно и как угодно.
Можешь для загонки в вектор уникальных элементов использовать map - но это изврат. Для уникальных элементов вектора используй std::unique_copy
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
12.11.2013, 11:48  [ТС] #7
Цитата Сообщение от newbie666 Посмотреть сообщение
map в STL нельзя отсортировать. Он изначально отсортирован по ключу и в него встроен find. В бусте было что то подобное...
Ок! Значит в ручную найду максимальный элемент.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
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
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
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
newbie666
Заблокирован
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 чем просто открыть заголовочники и посмотреть, что там написанно.

0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
12.11.2013, 12:08  [ТС] #12
Цитата Сообщение от newbie666 Посмотреть сообщение
Код неказистый, лень было нормально форматировать. Но делается это именно так
Ок норм код. Твою версию буду использовать.
0
12.11.2013, 12:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2013, 12:08
Привет! Вот еще темы с ответами:

Отсортировать контейнер map по значению элементов - C++
Есть заполненный контейнер unordered_map (ну или просто map) Нужно отсортировать его по значению или сделать сортированный по значению...

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

Map с поиском как по ключу, так и по значению - C++
Реализовано ли подобное в stl? (или в boost, например) И как в теории выглядит эта реализация? Предполагаю, что это два сбалансированных...

Сортировка в map - C++
Как отсортировать в map не по ключу, а по значению для вывода.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru