Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/46: Рейтинг темы: голосов - 46, средняя оценка - 4.91
MiThEoN
 Аватар для VASSUV
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2

STL :: map

16.10.2011, 18:07. Показов 9827. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся с такой проблемой:
Нужно вставить в отсортированную map-таблицу элемент.
Использую:
C++
1
2
myMap.insert(myIterator,pair<type1, type2>(val1,val2) );
\\Итератор указывает на тот элемент, за место которого нужно было вставить новый элемент
Но во время отладки увидел что insert добавляет все в конец таблицы, хотя нужно было в середину.

Может я как бы не правильно использовал функцию, или мап для сортировки не подходит?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2011, 18:07
Ответы с готовыми решениями:

Map stl
Не могу понять, почему не находит через h1.find(argv). когда argv == &quot;-o&quot; vs пишет &quot;itr = (0xcdcdcdcd &lt;Ошибка при чтении символов...

STL map
Вопрос:как мне узнать что не создавался map с заданым str? #include &lt;iostream&gt; #inlclude &lt;map&gt; #include &lt;string&gt; using...

stl map
где можно прочитать о stl map? подскажите книги..

20
Заблокирован
16.10.2011, 18:16
Цитата Сообщение от VASSUV Посмотреть сообщение
Столкнулся с такой проблемой:
Нужно вставить в отсортированную map-таблицу элемент.
Использую:
C++
1
2
myMap.insert(myIterator,pair<type1, type2>(val1,val2) );
\\Итератор указывает на тот элемент, за место которого нужно было вставить новый элемент
Но во время отладки увидел что insert добавляет все в конец таблицы, хотя нужно было в середину.

Может я как бы не правильно использовал функцию, или мап для сортировки не подходит?
Контейнер std::map вставляет элементы в то место, которое соответствует условию упорядоченности элементов для заданного контейнера std::map. Так что вы можете указать итератор вставки, но контейнер поместит новый элемент совсем в другое место.

Посмотрите описание метода insert для std::map, особенно возвращаемое этим методом значение, и вам все станет ясно!
0
MiThEoN
 Аватар для VASSUV
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2
16.10.2011, 18:56  [ТС]
Сыроежка, но если я правильно все делал, тогда при обращении к i-ому элементу мапа, то этот элемент будет в отсортированном состоянии?
0
Заблокирован
16.10.2011, 19:01
Цитата Сообщение от VASSUV Посмотреть сообщение
Сыроежка, но если я правильно все делал, тогда при обращении к i-ому элементу мапа, то этот элемент будет в отсортированном состоянии?
Я не понял, что вы имеете в виду под обращением к i-ому элементу, но я довольно ясно сказал, что std::map помещает элементы согласно условию упорядочности (по умолчанию это условие std::less). Поэтому map ваш итератор принимает лишь к сведению, а новый элемент может оказаться совершенно в другом месте контейнера.

Я вам еще раз настоятельно рекомендую почитать описание метода insert для контейнера std::map, в частности, возвращаемое им значение.
0
MiThEoN
 Аватар для VASSUV
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2
16.10.2011, 19:03  [ТС]
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я не понял, что вы имеете в виду под обращением к i-ому элементу
operator[]
0
Заблокирован
16.10.2011, 19:05
Цитата Сообщение от VASSUV Посмотреть сообщение
operator[]
Я не понял, что вы хотели этим сказать.
На мой взгляд я вам довольно ясно описал ситуацию.
0
MiThEoN
 Аватар для VASSUV
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2
16.10.2011, 19:08  [ТС]
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я не понял, что вы хотели этим сказать.
скорее всего.

Цитата Сообщение от Сыроежка Посмотреть сообщение
На мой взгляд я вам довольно ясно описал ситуацию
нет, Вы просто 3 раза повторили вызубренную формулировку
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
16.10.2011, 19:10
Цитата Сообщение от VASSUV Посмотреть сообщение
Сыроежка, но если я правильно все делал, тогда при обращении к i-ому элементу мапа, то этот элемент будет в отсортированном состоянии?
отображение (map) - это не массив и не таблица, не последовательный контейнер. Доступ в нем происходит не по индексу, а по ключу. Место, куда помещается новая пара (ключ, значение) зависит от внутренней реализации отображения, а не от твоего желания. См. в описании метода insert:
Code
1
2
3
4
position
Position of the first element to be compared for the insertion operation.
 Notice that this does not force the new element to be in that position within the map container (elements in a set always follow a specific ordering), but this is actually an indication of a possible insertion position in the container that, if set to the element that precedes the actual location where the element is inserted, makes for a very efficient insertion operation.
iterator is a member type, defined as a bidirectional iterator type.
И сделаю акцент на следующей фразе:
Code
1
Notice that this does not force the new element to be in that position
1
Заблокирован
16.10.2011, 19:11
Цитата Сообщение от VASSUV Посмотреть сообщение
скорее всего.


нет, Вы просто 3 раза повторили вызубренную формулировку
А что делать, если вы с первого раза не понимаете, что вам пишут?! И, что вам вообще лень даже почитать о том методе, который вы используете! Вы похожи на человека, который сам не понимает, что он делает, то есть совершенно на неадекватного человека. В конце концов, почитайте описание метода insert для map. Вам сколько раз это надо повторить?!!!
0
MiThEoN
 Аватар для VASSUV
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2
16.10.2011, 19:15  [ТС]
Прошу прощения, что не доглядел что в операторе [] используется ключ.

Добавлено через 2 минуты
Так, будьте добры пожалуйста, опишите как мне(к примеру) вывести на экран значения в упорядоченном виде
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
16.10.2011, 19:18
Цитата Сообщение от VASSUV Посмотреть сообщение
Так, будьте добры пожалуйста, опишите как мне(к примеру) вывести на экран значения в упорядоченном виде
упорядочивается по ключу... значения проще в другой массив скинуть, и отсортировать
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
16.10.2011, 19:19
VASSUV, в отображении в упорядоченном виде хранятся не значения, а ключи
1
Заблокирован
16.10.2011, 19:22
Цитата Сообщение от VASSUV Посмотреть сообщение
Прошу прощения, что не доглядел что в операторе [] используется ключ.

Добавлено через 2 минуты
Так, будьте добры пожалуйста, опишите как мне(к примеру) вывести на экран значения в упорядоченном виде
У вас и так значения в map находятся в упорядочном виде. Это конечно при условии, что вы хотите сохранить этот порядок при выводе на экран.

Самое простое - это использовать стандартный алгоритм std::copy, объявленный в заголовочном файле <algorithm>, либо делайте это в цикле самостоятельно. Вы можете получить начальный итератор контейнера (например, MyMap.begin() ) и конечный ( MyMap.end() ), и вывести все элементы из этого диапазона.
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
16.10.2011, 19:23
Если хочешь воспользоваться контейнером для упорядоченного вывода каких-либо значений, то тебе должен подойти set (см. пример)

Цитата Сообщение от Сыроежка Посмотреть сообщение
У вас и так значения в map находятся в упорядочном виде
если порядок определяется ключом, то согласен
1
MiThEoN
 Аватар для VASSUV
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2
16.10.2011, 19:43  [ТС]
Кусок моей функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int k = 0;
type1 y = type1(/*тут что нибудь есть*/);
type2 x = type2(/*тут что нибудь есть*/);
map<type1, type2>::iterator i = myMap.begin();
while(i != mylist.end()){
    if(x < i->second){
        i++;
        k++;
    }else{
        mylist.insert(i,pair<type1, type2>(y,x) );// <- значит вот эта штука не сработает для упорядочивания?!!!
        return k;
    }
}
myMap.insert(pair<type1, type2>(y,x));
return k;
И скажите наконец что, мапы ни упорядочеваются ни в коем случае, либо до этого были лишь пустые слова(не хотел обидеть)...
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
16.10.2011, 19:47
Цитата Сообщение от VASSUV Посмотреть сообщение
И скажите наконец что, мапы ни упорядочеваются ни в коем случае
они упорядочиваются по ключу
1
Заблокирован
16.10.2011, 19:54
Цитата Сообщение от VASSUV Посмотреть сообщение
Кусок моей функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int k = 0;
type1 y = type1(/*тут что нибудь есть*/);
type2 x = type2(/*тут что нибудь есть*/);
map<type1, type2>::iterator i = myMap.begin();
while(i != mylist.end()){
    if(x < i->second){
        i++;
        k++;
    }else{
        mylist.insert(i,pair<type1, type2>(y,x) );// <- значит вот эта штука не сработает для упорядочивания?!!!
        return k;
    }
}
myMap.insert(pair<type1, type2>(y,x));
return k;
И скажите наконец что, мапы ни упорядочеваются ни в коем случае, либо до этого были лишь пустые слова(не хотел обидеть)...
Ваша проблема в вашем невежестве и лени. Вы не хотите потратить 5 минут, чтобы почитать о std::map, прежде чем отнимать время у других.
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
16.10.2011, 19:59
Цитата Сообщение от Nameless One Посмотреть сообщение
они упорядочиваются по ключу
чтобы не быть голословным, вот пример:
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
27
#include <iostream>
#include <map>
#include <string>
 
// ключи - строки, значения - числа
// над ключами задан лексикографический порядок:
// "a" < "ab" < "ba" < "bb" < "c"
 
int main()
{
    std::map<std::string, int> map;
 
    map["c"] = 1;
    map["ba"] = 2;
    map["ab"] = 3;
    map["bb"] = 4;
    map["a"] = 5;
 
    // вывод значений map в порядке, заданном их ключами
 
    for(std::map<std::string, int>::const_iterator it = map.begin();
    it != map.end();
    ++it)
    std::cout << "Key: " << it->first << "\tValue: " << it->second << std::endl;
 
    return 0;
}
Как видно, вывод происходит в порядке возрастания ключа
1
16.10.2011, 20:02

Не по теме:

Чудесная книга по STL Л.Аммерааль - STL для программистов на C++, на русском.
Уж охоту изучать STL точно не отобьёт. В сети есть. И даже примеры из книги в сети есть, ничё вручную набивать не надо...

1
16.10.2011, 20:16  [ТС]

Не по теме:

Не хочу Вас всех огорчать, из-за того что выражал свою упрямость и не смог выразить свою мысль, ибо я это все уже делал до того чтобы обратится сюда. Так что всем спасибо.



Не по теме:

И придется мне упорядочивать ключи так что - бы по ним были упорядочены значения

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2011, 20:16
Помогаю со студенческими работами здесь

Вопрос об map STL
Как вивести map? list&lt;int&gt; l; for (int i=1; i&lt;=5; i++) l.push_back(i); map&lt;int,list&lt;int&gt;&gt; a; int d = 9; int f = 5; ...

Не могу разобраться с map(STL)
Недавно понадобилось использование ассоциативного массива map(STL), дабы сократить код программы. Но возникли сложности. В кратце в...

STL. Map, vector. Строки
Здравствуйте. Почти не знаком с STL. Имеется вектор строк. Нужно найти частоту использования каждой буквы. Я уже который...

Сложение двух STL map
Напишите пожалуйста простой пример сложения двух STL map

Примеры алгоритмов для STL map
Помогите пожалуйста. Начал делать лабораторную работу. Суть задания: реализовать для map 5 алгоритмов sort, copy, none_of, find_if,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru