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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.87
VASSUV
MiThEoN
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 418
Записей в блоге: 2
Завершенные тесты: 1
#1

STL :: map - C++

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

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

Может я как бы не правильно использовал функцию, или мап для сортировки не подходит?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 18:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос STL :: map (C++):

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

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

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

Вопрос об map STL - C++
Как вивести 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; ...

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

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

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

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

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

Я вам еще раз настоятельно рекомендую почитать описание метода insert для контейнера std::map, в частности, возвращаемое им значение.
0
VASSUV
MiThEoN
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 418
Записей в блоге: 2
Завершенные тесты: 1
16.10.2011, 19:03  [ТС] #5
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я не понял, что вы имеете в виду под обращением к i-ому элементу
operator[]
0
Сыроежка
Заблокирован
16.10.2011, 19:05 #6
Цитата Сообщение от VASSUV Посмотреть сообщение
operator[]
Я не понял, что вы хотели этим сказать.
На мой взгляд я вам довольно ясно описал ситуацию.
0
VASSUV
MiThEoN
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 418
Записей в блоге: 2
Завершенные тесты: 1
16.10.2011, 19:08  [ТС] #7
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я не понял, что вы хотели этим сказать.
скорее всего.

Цитата Сообщение от Сыроежка Посмотреть сообщение
На мой взгляд я вам довольно ясно описал ситуацию
нет, Вы просто 3 раза повторили вызубренную формулировку
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
16.10.2011, 19:10 #8
Цитата Сообщение от VASSUV Посмотреть сообщение
Сыроежка, но если я правильно все делал, тогда при обращении к i-ому элементу мапа, то этот элемент будет в отсортированном состоянии?
отображение (map) - это не массив и не таблица, не последовательный контейнер. Доступ в нем происходит не по индексу, а по ключу. Место, куда помещается новая пара (ключ, значение) зависит от внутренней реализации отображения, а не от твоего желания. См. в описании метода insert:
Код
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.
И сделаю акцент на следующей фразе:
Код
Notice that this does not force the new element to be in that position
1
Сыроежка
Заблокирован
16.10.2011, 19:11 #9
Цитата Сообщение от VASSUV Посмотреть сообщение
скорее всего.


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

Добавлено через 2 минуты
Так, будьте добры пожалуйста, опишите как мне(к примеру) вывести на экран значения в упорядоченном виде
0
oxotnik
1590 / 1067 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
16.10.2011, 19:18 #11
Цитата Сообщение от VASSUV Посмотреть сообщение
Так, будьте добры пожалуйста, опишите как мне(к примеру) вывести на экран значения в упорядоченном виде
упорядочивается по ключу... значения проще в другой массив скинуть, и отсортировать
1
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
16.10.2011, 19:19 #12
VASSUV, в отображении в упорядоченном виде хранятся не значения, а ключи
1
Сыроежка
Заблокирован
16.10.2011, 19:22 #13
Цитата Сообщение от VASSUV Посмотреть сообщение
Прошу прощения, что не доглядел что в операторе [] используется ключ.

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

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

Цитата Сообщение от Сыроежка Посмотреть сообщение
У вас и так значения в map находятся в упорядочном виде
если порядок определяется ключом, то согласен
1
VASSUV
MiThEoN
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 418
Записей в блоге: 2
Завершенные тесты: 1
16.10.2011, 19:43  [ТС] #15
Кусок моей функции
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
16.10.2011, 19:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2011, 19:43
Привет! Вот еще темы с ответами:

STL(map). Где инициализировать массив? - C++
Для начала: не получалось данную тему назвать более логично, сайт не пропускал :-| Добрый день. Имеется: map&lt;int, string&gt;...

Stl стандартная библиотека шаблонов c++ map - C++
Доброго всем времени суток :) Помогите пожалуйста дописать прогу. Нужно добавить сортировку по фамилии (что бы выводились в алфавитном...

Map STL - максимальный объем памяти - C++
Пишу модуль для программы - что-то вроде переводчика. Есть словарь синонимов (40+мб). Загружаю его в map, но после 740000+ ключа,...

Контейнер map и алгоритмы STL: несовместимость? - C++
Всем доброго времени суток! Столкнулся с проблемой: алгоритм remove_if не работает с контейнером map. Рассмотрим следующую функцию: ...


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

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

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