Я должен хранить и работать с позицией нескольких элементов в файле.Каждый элемент находится в определенной позиции в файле (индекс строки, индекс слова в строке).Каждый элемент уникальным образом определяется идентификатором, хранящимся в виде строки.
Я храню эту информацию на карте следующим образом:
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 для совместимости со старыми компиляторами.