Разве C ++ Map не должна быть структурой данных произвольного доступа, а не структурой данных двунаправленного доступа? - PullRequest
0 голосов
/ 05 февраля 2020

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

Ответы [ 2 ]

3 голосов
/ 05 февраля 2020

Нет.

Концепция RandomAccessIterator расширяется BidirectionalIterator , также требуя, чтобы вы могли добавить число итератору.

не имеет отношения к key_type из AssociativeContainer или UnorderedAssociativeContainer , Что бы означало добавить 5 к "мудит"?

2 голосов
/ 05 февраля 2020

Почему карта представляет собой двунаправленную структуру данных

Как вы думаете, почему карта является"структурой двунаправленных данных"?

Разве C ++ Map не должна быть структурой данных с произвольным доступом

Почему вы думаете, что не ?

Почему вы предполагаете, что "двунаправленный" и " произвольный доступ "являются взаимоисключающими?

Серьезно, какой бы источник ни дал вам эти условия, либо он неверен, либо вы его неправильно поняли. Если вы не скажете, откуда пришли ваши неверные предположения, мы не сможем вам в этом помочь.

Мы можем легко получить доступ к любому элементу, если узнаем его по ключу, так же как массиву, который такое структура данных с произвольным доступом?

Да, std::map моделей AssociativeContainer , как вы ожидаете.

Тогда карта не должна быть структурой данных произвольного доступа

Вы пытаетесь спросить, почему карта не называется"структурой данных произвольного доступа"? Это потому, что мы называем это AssociativeContainer , но значение схоже.

Вы пытаетесь спросить, почему карта не является произвольным доступом в реальности, даже если она поддерживает поиск по ключу? Затем вы должны сказать нам, что вы подразумеваете под «произвольным доступом» , кроме возможности поиска по ключу.

Операция поиска - логарифмическая c, а не постоянная сложность, если это различие, которое вы хотите провести, потому что карта является отсортированным ассоциативным контейнером.

Тот факт, что итератор карты является двунаправленным, не влияет на то, как вы находите элементы по ключу. Это просто означает, что как только вы нашли (итератор указывает на) элемент, вы можете идти вперед или назад по его соседям в отсортированном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...