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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.80
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 269
#1

Сортировка map - C++

08.11.2011, 16:20. Просмотров 5964. Ответов 16
Метки нет (Все метки)

Здрасьте. Есть map (я с ним ещё плохо знаком)
C++
1
map <string, list<string> > data;
задача - отсортировать списки в нём (методом sort()).
если знаешь ключи - всё легко
C++
1
2
data[key1].sort();
data[key2].sort();
Вопрос - что делать, если не знаешь сколько ключей и какие они? Использовать for_each? но тогда как выделить контейнер списка из map'а, не зная его ключа?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2011, 16:20     Сортировка map
Посмотрите здесь:

Сортировка в map - C++
Доброго времени суток. Имеется структура map: map&lt;string, size_t&gt; words; В ней содержится слово и число. map превращается в vector: ...

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

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

Map контейнер сортировка - C++
Добрый день. Собственно необходимо вывести отсортированный мап контейнер по числу гласных в слове. Вводить строку и выводить мап...

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
08.11.2011, 16:22     Сортировка map #2
IcyWind, Итератором. Не?
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 269
08.11.2011, 16:26  [ТС]     Сортировка map #3
Может быть
повторюсь, с map ещё не знаком.
было бы хорошо, если, скажем что-то типо
C++
1
map <string, list<string> > :: iterator p = data.begin()
указывал на первый список, тогда просто *p.sort
но, в map итератор указывает на пару элементов, верно?
поэтому и непонятно...мне бы организовать перебор списков в map, не трогая сами элементы в списках
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.11.2011, 16:27     Сортировка map #4
map по умолчанию отсортирован. Не?
Bers
Заблокирован
08.11.2011, 16:29     Сортировка map #5
Цитата Сообщение от diagon Посмотреть сообщение
map по умолчанию отсортирован. Не?
Только ключи. А можно отсортировать значения ключей.
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 269
08.11.2011, 16:29  [ТС]     Сортировка map #6
Цитата Сообщение от diagon Посмотреть сообщение
map по умолчанию отсортирован. Не?
Даже, если и да, мне нужно не map отсортировать, а списки в нём
вот так:
C++
1
2
data[key1].sort();
data[key2].sort();
проблема возникает тогда, когда я не знаю значения key1 и key2 и само кол-во ключей
Bers
Заблокирован
08.11.2011, 16:33     Сортировка map #7
http://www.cplusplus.com/reference/stl/map/
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.11.2011, 16:37     Сортировка map #8
Цитата Сообщение от IcyWind Посмотреть сообщение
Даже, если и да, мне нужно не map отсортировать, а списки в нём
Так как-то
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <map>
#include <list>
#include <string>
#include <algorithm>
 
typedef std::map< std::string, std::list< std::string > > map_t;
 
int main()
{
    map_t map;
    
    for ( map_t::iterator it = map.begin() ; it != map.end() ; ++it ) 
        it->second.sort();
}
Цитата Сообщение от IcyWind Посмотреть сообщение
проблема возникает тогда, когда я не знаю значения key1 и key2
А вот это я не понял.

P.S. по текущему стандарту можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <map>
#include <list>
#include <string>
#include <algorithm>
 
typedef std::map< std::string, std::list< std::string > > map_t;
 
int main()
{
    map_t map;
    
    for ( auto &it : map ) 
        it.second.sort();
}
Bers
Заблокирован
08.11.2011, 16:40     Сортировка map #9
Цитата Сообщение от diagon Посмотреть сообщение
А вот это я не понял.
Он имеет ввиду, если он заранее не знает имена ключей, то как он сможет получить доступ к объектам.

Он не знает том, как можно пользоваться итераторами мапа
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 269
08.11.2011, 16:43  [ТС]     Сортировка map #10
Цитата Сообщение от diagon Посмотреть сообщение
Так как-то
А разве в вашем примере списки не будут сортироваться несколько раз?
например, есть ключи key1, в неём 2 элемента val1 и val2.
и тогда при изменении итератора it я сначала попаду в пару [key1;val1], тогда я отсортирую список map_t[key1], а потом попаду в пару [key1;val2] и опять же отсортирую список map_t[key1], не?
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.11.2011, 16:45     Сортировка map #11
Цитата Сообщение от IcyWind Посмотреть сообщение
А разве в вашем примере списки не будут сортироваться несколько раз?
например, есть ключи key1, в неём 2 элемента val1 и val2.
и тогда при изменении итератора it я сначала попаду в пару [key1;val1], тогда я отсортирую список map_t[key1], а потом попаду в пару [key1;val2] и опять же отсортирую список map_t[key1], не?
Ммм... Что?
У одного ключа не может быть несколько значений.
Может у вас не map, а multimap?
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 269
08.11.2011, 16:52  [ТС]     Сортировка map #12
Тогда я не правильно понимаю, как работает итератор
Пример
C++
1
2
3
4
5
map <string, list<string> > data;
data["aa"].pushback('a');
data["aa"].pushback('b');
data["bb"].pushback('a');
data["cc"].pushback('c');
тогда (как я думал)
C++
1
2
3
4
5
map <string, list<string> > :: iterator p = data.begin //указывает на элемент a в списке aa
++p;//указывает на элемент b в списке aa. p->first = aa. а вот p->second?? неужели = data[aa]??
++p;//указывает на элемент a в списке bb
++p;// на с в списке cc
++p;// указывает на data.end();
поясните, если не так
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.11.2011, 16:54     Сортировка map #13
Цитата Сообщение от IcyWind Посмотреть сообщение
map <string, list<string> > :: iterator p = data.begin //указывает на элемент a в списке aa
Указывает на список аа
Потом на список bb, потом на cc
Bers
Заблокирован
08.11.2011, 16:54     Сортировка map #14
IcyWind, я ж вам давал ссылочку на материал. Там полная документация с примерами.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2011, 16:56     Сортировка map
Еще ссылки по теме:

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

Приведение map<int, B> к map<int, A> - C++
class A {}; class B : public A {}; unordered_map&lt;int, shared_ptr&lt;B&gt; &gt; bs; Как привести bs к unordered_map&lt;int, shared_ptr&lt;A&gt;...

map - C++
объясните пожалуйсто как это работает, почему тут &lt;string, int, less&lt;string&gt;&gt; так много перемееных #include &lt;map&gt; #include &lt;string&gt; ...

Map'ы - C++
Здравствуйте! Пожалуйста объясните как пользоваться мапами? Реализация, считывание и т.д

map - C++
#include&lt;iostream&gt; #include&lt;map&gt; int main() { std::map&lt;int, int&gt; fib; fib = 1; fib = 1; fib = 2; std::cout &lt;&lt; &quot;Map...


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

Или воспользуйтесь поиском по форуму:
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 269
08.11.2011, 16:56  [ТС]     Сортировка map #15
Цитата Сообщение от Bers Посмотреть сообщение
IcyWind, я ж вам давал ссылочку на материал. Там полная документация с примерами.
успел только быстренько просмотреть...
щас получше изучу
Yandex
Объявления
08.11.2011, 16:56     Сортировка map
Ответ Создать тему
Опции темы

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