LINUX.ORG.RU

C++ std::map

 ,


0

3

А правда, что в C++ до 20 у мапы не было containsKey() за O(1)?



Последнее исправление: untitl3d (всего исправлений: 1)

hash_map был уже в SGI STL в 96м.

rupert ★★★★★
()

А как ты представляешь себе поиск ключа в красно-черном дереве за O(1)? Это тоже самое, что найти всю ноду с ключом и значением. Нужно O(1) - юзай хэш-таблицы

annulen ★★★★★
()

А справочник не осилил? до 20 не было метода вообще. У мэпа сложность логарифмическая, там не может быть О1.

PS: А в unordered_map::find() всегда О1 было.

kvpfs ★★
()
Последнее исправление: kvpfs (всего исправлений: 2)
Ответ на: комментарий от anonymous

Да. То что std::map по дефолту сортирует по ключам, и отдельно есть unordered, это странно. Сегодня вот на это напоролся и написал неэффективный алгоритм =\

ps: плюсы видел разок в дверной глазок

untitl3d
() автор топика
Ответ на: комментарий от anonymous

А какие проблемы с наименованием?

  • map - отображение
  • set - множество
  • если приставка unordered - значит неупорядоченный контейнер

То, что там под капотом, бинарное дерево или хэш таблица - стандарт не определяет.

rumgot ★★★★★
()
Ответ на: комментарий от untitl3d

Один разок можно и в шоколадный глазок! (И нужно!) А как этот метод должен работать, что за магия такая?

Benis
()
Ответ на: комментарий от untitl3d

То что std::map по дефолту сортирует по ключам, и отдельно есть unordered, это странно

Нет. Не странно.

map/set - упорядоченное отображение/множество. Раз упорядоченное - значит бинарное дерево под капотом.

unordered_map/unordered_set - неупорядоченное отображение/множество. Раз неупорядоченное - значит под капотом хэш таблица.

По-моему все логично.

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

Нет. Не странно. map/set - упорядоченное отображение/множество

Справедливости ради, в словах map и set нет ни намека на какое-либо упорядочение элементов, и множество (set) в математическом смысле тоже не подразумевает существование операции сравнения у элементов. Так что тут причины чисто исторические, так как в C++98 были только упорядоченные множества, а совместимость нарушать нельзя.

annulen ★★★★★
()
Ответ на: комментарий от annulen

Справедливости ради, в словах map и set нет ни намека на какое-либо упорядочение элементов

Да. Но если смотреть на пару: множество / неупорядоченное множество - то уже закрадывается мысль, что если во втором случае неупорядоченное, то значит в первом упорядоченное.

rumgot ★★★★★
()
Ответ на: комментарий от annulen

Справедливости ради, в словах map и set нет ни намека на какое-либо упорядочение элементов

На хеширование тоже нет.

anonymous
()
Ответ на: комментарий от anonymous

Да, поэтому ОП не должен был его подразумевать

annulen ★★★★★
()
Ответ на: комментарий от anonymous

Ну это если перевести в лоб - то это карта. Но также есть такое слово:

mapping - отображение
rumgot ★★★★★
()

У неё с рождения был метод count, который работал точно так же, но названием отпугивал квадратно-гнездовых жавистов.

Esper
()

а с чего ты взял что O(1) будет всегда быстрее иных сложностей? — она вполне может быть намного дольше чем O(n).

safocl ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.