【发布时间】:2019-05-12 04:41:52
【问题描述】:
我必须存储和处理文件中多个元素的位置。每个元素都位于文件中的定义位置(行索引,行中的单词索引)。每个元素都由存储为字符串的 ID 唯一定义。
我将此信息存储在这样的地图中:
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 中是否有一些智能结构能够通过行/列索引和 ID 进行有效访问而无需复制?
注意:出于与旧编译器兼容的原因,我不使用 C++11。
【问题讨论】:
-
你考虑过Boost Multi-Index吗?