Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
RAFA91
Заблокирован
1

Вставка элемента в карту

25.11.2015, 16:53. Просмотров 406. Ответов 17
Метки нет (Все метки)

Добрый день !
Не могу понять зачем в функции

C++
1
p = m.insert(p,pair<char,int>('F',300));
указывать итератор , если этот элемент вставляется совсем в другое место.

(как до итератора так и после)

хотя в описании четко сказано , что :
0
Миниатюры
Вставка элемента в карту  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2015, 16:53
Ответы с готовыми решениями:

Вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента
Добавить в класс &quot;Односвязный список&quot; следующие функции: вставка элемента в...

Поиск элемента в бинарном дереве, вставка элемента
Прошу помочь написать программу для поиска элемента в бинарном дереве, и...

Вставка элемента
Доброго времени суток. Нужна помощь разбираюсь с кодом вставки элемента в...

Вставка элемента
Как сделать вставку элемента в массив по заданной позиции

Вставка элемента в вектор
Задача вставить новый элемент после все элементов, кратных своему номеру. Когда...

17
RAFA91
Заблокирован
09.06.2016, 16:17  [ТС] 2
Цитата Сообщение от RAFA91 Посмотреть сообщение
Не могу понять зачем в функции

Код
p = m.insert(pair<char,int>('F',300));

Есть ли в карте метод который подсчитывает к-во дублирующих значений типо того как в мультикарте считает к-во дублирующих ключей ?
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,117
Записей в блоге: 10
Завершенные тесты: 1
09.06.2016, 16:27 3
Цитата Сообщение от RAFA91 Посмотреть сообщение
указывать итератор , если этот элемент вставляется совсем в другое место.
Итератор - это просто подсказка для более быстрой вставки.
0
RAFA91
Заблокирован
09.06.2016, 16:30  [ТС] 4
Цитата Сообщение от castaway Посмотреть сообщение
Итератор - это просто подсказка для более быстрой вставки.
при вставке он там не нужен.

что множество что карта - все равно все ляжет в виде дерева.

фактически карта хранит обьекты типа pair - и это наверное хорошо.
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,117
Записей в блоге: 10
Завершенные тесты: 1
09.06.2016, 16:38 5
Цитата Сообщение от RAFA91 Посмотреть сообщение
при вставке он там не нужен.
Ты же сам написал что функция требует, а теперь говоришь что не нужен.
Я объяснил для чего он. Что тебе непонятно?

Добавлено через 44 секунды
Цитата Сообщение от RAFA91 Посмотреть сообщение
что множество что карта - все равно все ляжет в виде дерева.
Откуда такая "достоверная" информация?
0
RAFA91
Заблокирован
09.06.2016, 16:40  [ТС] 6
Цитата Сообщение от castaway Посмотреть сообщение
Ты же сам написал что функция требует,
это в книге было написано (скрин вверху). может кому-то и пригодится .

все знают что карта и множество сортирует свои звенья в древовидном виде для быстрого поиска.
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,117
Записей в блоге: 10
Завершенные тесты: 1
09.06.2016, 16:47 7
Цитата Сообщение от RAFA91 Посмотреть сообщение
все знают что карта и множество сортирует свои звенья в древовидном виде для быстрого поиска.
Все - это кто? Я вот не знал.
Выдержка с cppreference:
Maps are usually implemented as red-black trees
Ключевое слово usually. Но это не так важно.

Цитата Сообщение от RAFA91 Посмотреть сообщение
Есть ли в карте метод
Нет, но можно реализовать через std::count.
0
Новичок
Модератор
1504 / 974 / 463
Регистрация: 17.07.2012
Сообщений: 4,949
Завершенные тесты: 3
09.06.2016, 16:52 8
http://www.cplusplus.com/reference/map/map/insert/
C++
1
2
3
std::map<char,int>::iterator it = mymap.begin();
mymap.insert (it, std::pair<char,int>('b',300));  // max efficiency inserting
mymap.insert (it, std::pair<char,int>('c',400));  // no max efficiency inserting
Я так понял что если правильно указать итератор то вставка будет быстрее.
C++
1
iterator insert (iterator position, const value_type& val);
position
Hint for the position where the element can be inserted.
Notice that this is just a hint and does not force the new element to be inserted at that position within the map container (the elements in a map always follow a specific order depending on their key).
Complexity
If a single element is inserted, logarithmic in size in general, but amortized constant if a hint is given and the position given is the optimal.
Добавлено через 4 минуты
Т.е обычно вставка занимает log(n) операций, но если передать правильный итератор, то вставка будет выполнятся за константное время(бесплатно по сути).
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,117
Записей в блоге: 10
Завершенные тесты: 1
09.06.2016, 16:52 9
Цитата Сообщение от Новичок Посмотреть сообщение
Я так понял что если правильно указать итератор то вставка будет быстрее.
Правильно. О чём я и пытался донести ТС, но, видимо, он знает лучше нас.
0
RAFA91
Заблокирован
09.06.2016, 16:53  [ТС] 10
Цитата Сообщение от castaway Посмотреть сообщение
Нет, но можно реализовать через std::count.
это как ? собственную реализацию написать не проблема.

______________________________________________________

год назад столкнулся с Контейнер std: :unordered_map библиотеки STL на базе хеш-таблиц ключей и значений

по описанию unordered map предоставляет преимущество постоянной продолжительности
вставки, удаления и поиска произвольных элементов в контейнере


как тогда в ней расположены элементы ?
0
Новичок
Модератор
1504 / 974 / 463
Регистрация: 17.07.2012
Сообщений: 4,949
Завершенные тесты: 3
09.06.2016, 16:56 11
Цитата Сообщение от RAFA91 Посмотреть сообщение
как тогда в ней расположены элементы ?
Цитата Сообщение от RAFA91 Посмотреть сообщение
unordered map
Название говорит само за себя. В отличии от обычного map нельзя в порядке сортировки пройти по всем элементам, зато все операции занимают константное время.
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,117
Записей в блоге: 10
Завершенные тесты: 1
09.06.2016, 17:00 12
Цитата Сообщение от RAFA91 Посмотреть сообщение
это как ?
Попробуй сам реализовать. std::count.
0
RAFA91
Заблокирован
09.06.2016, 17:10  [ТС] 13
Цитата Сообщение от castaway Посмотреть сообщение
. std::count.

Вы алгоритмы имеете в виду. Предикат надо будет делать.
Цитата Сообщение от Новичок Посмотреть сообщение
Название говорит само за себя..

тогда этот контейнер лучше всех выходит ?

сначала .max_bucket_count() возвращает 8 , а при вставке 9 - го эл. уже 64 ...........

тут какая-то квадратичная зависимость (((((((. получается засираеться память (((((
0
Новичок
Модератор
1504 / 974 / 463
Регистрация: 17.07.2012
Сообщений: 4,949
Завершенные тесты: 3
09.06.2016, 17:15 14
Цитата Сообщение от RAFA91 Посмотреть сообщение
тогда этот контейнер лучше всех выходит ?
Если бы он был лучше всех обычных map/set не было бы. Недостаток его в том что он не упорядочен ну и константная сложность не всегда.
0
RAFA91
Заблокирован
09.06.2016, 17:19  [ТС] 15
?
Цитата Сообщение от Новичок Посмотреть сообщение
он не упорядочен
нельзя применять условия сортировки к ниму?
0
Новичок
Модератор
1504 / 974 / 463
Регистрация: 17.07.2012
Сообщений: 4,949
Завершенные тесты: 3
09.06.2016, 17:27 16
http://www.cplusplus.com/reference/unordered_set/unordered_set/begin/
0
RAFA91
Заблокирован
09.06.2016, 17:37  [ТС] 17
и что это значит

myset contains: Venus Jupiter Neptune Mercury Earth Uranus Saturn Mars
myset's buckets contain:
bucket #0 contains:
bucket #1 contains: Venus
bucket #2 contains: Jupiter
bucket #3 contains:
bucket #4 contains: Neptune Mercury //????????????????????????????????????????????????
bucket #5 contains:
bucket #6 contains: Earth
bucket #7 contains: Uranus Saturn //????????????????????????????????????????????????
bucket #8 contains: Mars
bucket #9 contains:
bucket #10 contains:
0
Новичок
Модератор
1504 / 974 / 463
Регистрация: 17.07.2012
Сообщений: 4,949
Завершенные тесты: 3
09.06.2016, 17:41 18
Цитата Сообщение от RAFA91 Посмотреть сообщение
Venus Jupiter Neptune Mercury Earth Uranus Saturn Mars
Ну видно же что не в алфавитном порядке это. А в обычном set вывело бы в алфавитном порядке.
0
09.06.2016, 17:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2016, 17:41

Вставка элемента в дерево
Доброго времени суток.Такая проблема,есть задача: Написать...

Вставка элемента в массив
Вставить число k перед всеми элементами массива, которые больше k.

Вставка элемента в однонаправленный список
помогите написать функцию добавления в конец списка нового элемента...


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

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

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