【问题标题】:Efficient access to data based on several fields高效访问基于多个字段的数据
【发布时间】: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。

【问题讨论】:

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


【解决方案1】:

看起来你正在寻找的是BiMap

一张有两条路的地图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2019-10-19
    • 2012-11-19
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    相关资源
    最近更新 更多