在 boost::multi_index 中访问 hashed_unique 中的数据

Accessing data in hashed_unique in boost::multi_index

我第一次尝试使用 boost 的多索引,我似乎无法理解我在网上看到的所有代码。

首先:我的目标是拥有一个以枚举作为直接访问键的容器,并且能够根据原始插入顺序对其进行迭代。

我已经像这样定义了我的提升元素:

struct VarMapEle {
    SolutionVariableNames first;
    uint    second;
};

struct var_tag {};
struct rand_tag {};

typedef multi_index_container<
    VarMapEle,
    indexed_by< 
        random_access<tag<rand_tag>>, // this index represents insertion order
        hashed_unique<tag<var_tag>, member<VarMapEle, SolutionVariableNames,     &VarMapEle::first>>
        >
> VariableMap;

我怎样才能完成我之前提到的任一项任务?

A multi_index_container 可以被认为是一堆容器(在你的例子中,一个 std::vector-like --random_acces-- 另一个类似于 std::unordered_set --hashed_unique--) 恰好作用于相同的底层元素集合。每个 "container" 或 index 都使用 get<tag>()get<n>() 访问,其中 n 是从 0 开始的顺序indexed_by 部分中指定的索引。因此,要按插入顺序遍历元素,您需要访问索引 #0 并像使用 std::vector:

一样使用它
for(const VarMapEle& e:m.get<rand_tag>()){
    std::cout<<e.first<<","<<e.second<<"\n";
}

同样,索引 #1 提供了查找功能:

auto it=m.get<var_tag>().find(SolutionVariableNames{1});
std::cout<<it->second<<"\n";