Проблема с моделью данных

#c #data-structures #boost #data-modeling

#c #структуры данных #повышение #моделирование данных

Вопрос:

Допустим, у меня есть пары данных string-> index, например

 "hello" -> 0
"best" -> 1
"nice" -> 2
"beautiful" -> 3
  

Теперь для моего потока я хочу иметь логарифмический поиск по строкам, поэтому очевидно поместить эти данные в std::map . Но в какой-то момент я хочу вернуть свои данные, упорядоченные по индексу (как написано выше), но без сложности o (N ^ 2). Как я могу это сделать, boost может помочь? std::map не подходит для второго требования. Как обрабатывать эти данные без использования N-зависимой памяти. (N — количество элементов в map.)

Комментарии:

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

2. Это зависит от того, как изначально заполняется структура данных. Если у вас есть все исходные данные, вы можете использовать vector<pair<string, int>> и отсортировать их. Затем используйте binary_search для имитации карты. Прибегайте к нему, когда вам нужен другой порядок. Использует даже меньше памяти, чем карта!

Ответ №1:

Вам нужно использовать boost::bimap . Ознакомьтесь с документацией здесь.

Комментарии:

1. Является ли bimap переносом двух карт, в которых, в моем случае, string будет ключом, а во втором ключом будет индекс, и только эти две карты синхронизированы?

2. Я не знаю, как это реализовано.. вам нужно проверить документацию.

Ответ №2:

Если я правильно понял, вы можете использовать две карты. Одно string to index и другое index to string .