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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.77
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
#1

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

23.05.2012, 13:05. Просмотров 6854. Ответов 6
Метки нет (Все метки)

имеется вот такой вот тип:
C++
1
2
3
4
5
6
typedef struct
{
    char domain[LOG_SIZE_REFERER];
    set<uint32_t> unique_ip;
    set<uint32_t> unique_id;
} REF_LOG;

и map содержащий этот тип:
C++
1
2
map<unsigned short,REF_LOG> referers_map;
map<unsigned short,REF_LOG>::iterator ref_iter;
также функция сравнения для sort():
C++
1
2
3
4
inline bool RefCmp(REF_LOG param_1, REF_LOG param_2)
{
    return (param_1.unique_id.size() > param_2.unique_id.size());
};
при попытке сделать сортировку:
C++
1
sort(referers_map.begin(), referers_map.end(), RefCmp);
компилятор пишет много-много ошибок, я так понял что эта функция не работает на ассоциативные контейнеры.
Подскажите пожалуйста как можно отсортировать std::map по полю Value.
Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2012, 13:05     Сортировка std::map по значению
Посмотрите здесь:

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

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

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

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

Std::map и key_comp - C++
Есть задача, нужно задать в map класс для сравнения ключей, но классу для сравнения нужен ещё один вспомогательный елемент. Ну вот...

std::map не компилируется - C++
Всем здравствуйте. Возникла проблема при попытке использования std::map в visual studio 2010. при подключении файла &lt;map&gt; и объявлении...

Особенности std::map - C++
Добрый день форумчане, хотел спросить такую вещь, сейчас занимаюсь оптимизацией в графическом движке и возникла такая проблемма, хочу...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.05.2012, 13:13     Сортировка std::map по значению #2
Цитата Сообщение от stark91 Посмотреть сообщение
как можно отсортировать std::map по полю Value.
никак
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.05.2012, 13:14     Сортировка std::map по значению #3
Цитата Сообщение от stark91 Посмотреть сообщение
я так понял что эта функция не работает на ассоциативные контейнеры.
Естественно. Ну и еще есть такой факт, что map по умолчанию отсортирован по ключу.

Цитата Сообщение от stark91 Посмотреть сообщение
Подскажите пожалуйста как можно отсортировать std::map по полю Value.
Вы имеете в виду сортировку по значениям, а не по ключу?
Тогда здесь два выхода - использовать двунаправленные мапы, к примеру, из boost'a, либо сделать массив pair'ов и сортировать уже его.
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
23.05.2012, 13:20  [ТС]     Сортировка std::map по значению #4
а при помощи map::swap() можно такое реализовать?

Добавлено через 1 минуту
Цитата Сообщение от diagon Посмотреть сообщение
Тогда здесь два выхода - использовать двунаправленные мапы, к примеру, из boost'a, либо сделать массив pair'ов и сортировать уже его.
А можно пожалуйста по подробнее про все это?
Петррр
5942 / 3379 / 336
Регистрация: 28.10.2010
Сообщений: 5,926
23.05.2012, 13:24     Сортировка std::map по значению #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <array>
#include <algorithm>
 
bool cmp(const std::pair<int, int>& first, 
         const std::pair<int, int>& second)
{
    return first.second < second.second;
}
 
int main()
{
    std::array<std::pair<int, int>, 3> arr;
    arr[0] = std::pair<int, int>(1, 3);
    arr[1] = std::pair<int, int>(2, 2);
    arr[2] = std::pair<int, int>(3, 1);
    for(auto it = arr.begin(); it != arr.end(); ++it)
        std::cout << it->first << ": " << it->second << std::endl;
    std::sort(arr.begin(), arr.end(), cmp);
    std::cout << std::endl;
    for(auto it = arr.begin(); it != arr.end(); ++it)
        std::cout << it->first << ": " << it->second << std::endl;
    system("pause");
    return 0;
}
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.05.2012, 13:30     Сортировка std::map по значению #6
Цитата Сообщение от stark91 Посмотреть сообщение
а при помощи map::swap() можно такое реализовать?
А причем тут swap?

Цитата Сообщение от stark91 Посмотреть сообщение
А можно пожалуйста по подробнее про все это?
Пример с созданием и последующей сортировкой массива
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
#include <utility>
 
bool pred(const std::pair< int, int > &a, const std::pair< int, int > &b)
{
    return a.second < b.second;
}
 
int main()
{
    std::map< int, int > map;
    map[1] = 100500;
    map[2] = 404;
    map[3] = 666;
    
    //создаем вектор из map'a
    std::vector< std::pair< int, int > > vec(map.begin(), map.end() );
    //сортируем этот вектор по значению
    std::sort(vec.begin(), vec.end(), pred);
    //вывод 
    for (auto p : vec) //цикл в стиле c++11
        std::cout << p.first << ' ' << p.second << std::endl;
}
Что касается двунаправленных мапов - долго объяснять, да и зачем, если есть документация.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2012, 13:41     Сортировка std::map по значению
Еще ссылки по теме:

Размерность std::map - C++
Добрый вечер. Использую тип данных 16 байтовый. Надо записать несколько десятков миллионов расчетов в map &lt;type, type&gt; val; C...

allocator std::map - C++
Подскажите вопрос, есть тестовое задание: Подскажите где про это почитать и разъясните по-возможности, что это вообще такое...

Std::map::emplace - C++
То ли я туплю/криво поставил компилятор, то ли это emplace синтаксис кривой, но... Как использовать emplace применительно к map со...

std::map insert, нужно ли? - C++
ifstream input(&quot;data.txt&quot;); string tmp; while(getline(input,tmp)) { data d = getData(tmp); login++; pass++; } ...

std::map в инлайн-асме - C++
Доброго времени суток Имеется MAP-массив содержащий хуки для функций Нужно получить соответствующий адрес в naked функции: ...


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

Или воспользуйтесь поиском по форуму:
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
23.05.2012, 13:41  [ТС]     Сортировка std::map по значению #7
спасибо большое за инфу, буду разбираться
Yandex
Объявления
23.05.2012, 13:41     Сортировка std::map по значению
Ответ Создать тему
Опции темы

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