Как избежать сортировки на карте - PullRequest
5 голосов
/ 07 марта 2011

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

Ответы [ 5 ]

7 голосов
/ 07 марта 2011

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

2 голосов
/ 07 марта 2011

Похоже, что вам требуется два «просмотра» данных, один из которых поддерживает порядок вставки, а другой (предположительно) вы используете для быстрого поиска. Существует структура, которая позволяет вам поддерживать это - если вы можете включить повышение. Это контейнер boost multi_index . Вы можете указать два индекса: hashed_unique и ordered_unique.

1 голос
/ 07 марта 2011

Нет, нет.std::map<> сортирует по ключу для реализации O(lg(n)) поиска.

Вы можете обойтись с помощью std::vector<std::pair<Key,Value>>, чтобы достичь того, что вам нужно, но вам нужно будет написать свою собственную O(n) функцию поиска для извлечениязначения по ключу.

1 голос
/ 07 марта 2011

Способ, которым карта реализована внутри, не позволяет вам предотвратить сортировку ключей.Однако вы можете сохранить дополнительный список (используя вектор) для хранения порядка появления ключей.Позже итерируйте карту и вектор, чтобы достичь того, что вы хотите.

0 голосов
/ 07 марта 2011

Я размышляю здесь. Другие наверняка знают, но карты не хранятся в массиве. Это больше похоже на B-дерево.

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

Возможно, карта не самый лучший вариант для хранения. Если вы хотите получить вещи в том порядке, в котором вы их вставили, то, возможно, вектор.

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