Эффективный доступ к данным на основе нескольких полей - PullRequest
0 голосов
/ 11 декабря 2018

Я должен хранить и работать с позицией нескольких элементов в файле.Каждый элемент находится в определенной позиции в файле (индекс строки, индекс слова в строке).Каждый элемент уникальным образом определяется идентификатором, хранящимся в виде строки.

Я храню эту информацию на карте следующим образом:

typedef std::pair<std::size_t,std::size_t> LineColumn;
typedef std::map<std::string,LineColumn> ElementLineColumn;
ElementLineColumn element_line_column;

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

Но это не полезно для чтения всех элементов в файле.Для этого я дублирую информацию на другой карте, например:

typedef std::map<std::size_t,std::string> ColumnElement;
typedef std::map<std::size_t,ColumnElement> LineColumnElement;
LineColumnElement line_column_element;

Где line_column_element[element_line_column[key].first][element_line_column[key].second] == key

Это второе хранилище более полезно для просмотра всех элементов в том же порядке, чемхранится в файле.

Мой вопрос: есть ли в C ++ 03 / boost некоторые интеллектуальные структуры, способные обеспечить эффективный доступ по индексам строк / столбцов и идентификаторам без необходимости дублирования?

Примечание. Я не использую C ++ 11 для совместимости со старыми компиляторами.

1 Ответ

0 голосов
/ 14 декабря 2018

Похоже, что вы ищете это BiMap

Карта, которая идет двумя путями.

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