Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/140: Рейтинг темы: голосов - 140, средняя оценка - 4.54
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272

Сортировка map

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

Студворк — интернет-сервис помощи студентам
Здрасьте. Есть map (я с ним ещё плохо знаком)
C++
1
map <string, list<string> > data;
задача - отсортировать списки в нём (методом sort()).
если знаешь ключи - всё легко
C++
1
2
data[key1].sort();
data[key2].sort();
Вопрос - что делать, если не знаешь сколько ключей и какие они? Использовать for_each? но тогда как выделить контейнер списка из map'а, не зная его ключа?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.11.2011, 16:20
Ответы с готовыми решениями:

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

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

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

16
277 / 150 / 25
Регистрация: 05.11.2011
Сообщений: 429
Записей в блоге: 1
08.11.2011, 16:22
IcyWind, Итератором. Не?
0
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
08.11.2011, 16:26  [ТС]
Может быть
повторюсь, с map ещё не знаком.
было бы хорошо, если, скажем что-то типо
C++
1
map <string, list<string> > :: iterator p = data.begin()
указывал на первый список, тогда просто *p.sort
но, в map итератор указывает на пару элементов, верно?
поэтому и непонятно...мне бы организовать перебор списков в map, не трогая сами элементы в списках
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.11.2011, 16:27
map по умолчанию отсортирован. Не?
0
Заблокирован
08.11.2011, 16:29
Цитата Сообщение от diagon Посмотреть сообщение
map по умолчанию отсортирован. Не?
Только ключи. А можно отсортировать значения ключей.
0
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
08.11.2011, 16:29  [ТС]
Цитата Сообщение от diagon Посмотреть сообщение
map по умолчанию отсортирован. Не?
Даже, если и да, мне нужно не map отсортировать, а списки в нём
вот так:
C++
1
2
data[key1].sort();
data[key2].sort();
проблема возникает тогда, когда я не знаю значения key1 и key2 и само кол-во ключей
0
Заблокирован
08.11.2011, 16:33
http://www.cplusplus.com/reference/stl/map/
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.11.2011, 16:37
Цитата Сообщение от 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();
}
0
Заблокирован
08.11.2011, 16:40
Цитата Сообщение от diagon Посмотреть сообщение
А вот это я не понял.
Он имеет ввиду, если он заранее не знает имена ключей, то как он сможет получить доступ к объектам.

Он не знает том, как можно пользоваться итераторами мапа
0
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
08.11.2011, 16:43  [ТС]
Цитата Сообщение от diagon Посмотреть сообщение
Так как-то
А разве в вашем примере списки не будут сортироваться несколько раз?
например, есть ключи key1, в неём 2 элемента val1 и val2.
и тогда при изменении итератора it я сначала попаду в пару [key1;val1], тогда я отсортирую список map_t[key1], а потом попаду в пару [key1;val2] и опять же отсортирую список map_t[key1], не?
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.11.2011, 16:45
Цитата Сообщение от IcyWind Посмотреть сообщение
А разве в вашем примере списки не будут сортироваться несколько раз?
например, есть ключи key1, в неём 2 элемента val1 и val2.
и тогда при изменении итератора it я сначала попаду в пару [key1;val1], тогда я отсортирую список map_t[key1], а потом попаду в пару [key1;val2] и опять же отсортирую список map_t[key1], не?
Ммм... Что?
У одного ключа не может быть несколько значений.
Может у вас не map, а multimap?
0
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
08.11.2011, 16:52  [ТС]
Тогда я не правильно понимаю, как работает итератор
Пример
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();
поясните, если не так
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.11.2011, 16:54
Цитата Сообщение от IcyWind Посмотреть сообщение
map <string, list<string> > :: iterator p = data.begin //указывает на элемент a в списке aa
Указывает на список аа
Потом на список bb, потом на cc
0
Заблокирован
08.11.2011, 16:54
IcyWind, я ж вам давал ссылочку на материал. Там полная документация с примерами.
0
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
08.11.2011, 16:56  [ТС]
Цитата Сообщение от Bers Посмотреть сообщение
IcyWind, я ж вам давал ссылочку на материал. Там полная документация с примерами.
успел только быстренько просмотреть...
щас получше изучу
0
Заблокирован
08.11.2011, 17:01
Цитата Сообщение от IcyWind Посмотреть сообщение
успел только быстренько просмотреть...
щас получше изучу
Если совсем вкратце, итератор мапа содержит два элемента. Первый элемент хранит имя ключа, а второй элемент хранит само значение элемента мапа.

Подробности читайте в документации.
0
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
08.11.2011, 17:04  [ТС]
а......я просто не так понял принцип устройства самого map
думал, иттератор хранит пару "ключ" и "адрес в типе Т", а он хранит "ключ" и "сам тип Т"
Тогда сортировка будет
C++
1
2
3
4
for(map <string, list<string> > :: iterator p = data.begin(); p != data.end(); ++p)
{
        p->second.sort();
}
как вы и показывали....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.11.2011, 17:04
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru