基于多个字段有效访问数据

时间:2018-12-11 08:16:44

标签: c++ boost stl c++03

我必须存储和处理文件中几个元素的位置。每个元素都位于文件中的定义位置(行索引,行中的单词索引)。每个元素都由存储为字符串的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。

1 个答案:

答案 0 :(得分:0)

看起来您正在寻找的是BiMap

具有两种方式的地图。