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

Accessing data in hashed_unique in boost::multi_index

本文关键字:unique 数据 hashed index boost multi 访问      更新时间:2023-10-16

我第一次尝试使用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;

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

multi_index_container可以被认为是一堆容器(在您的示例中,一个类似于std::vector-random_acces-std::unordered_set-hashed_unique-),它们恰好作用于相同的底层元素集合。使用get<tag>()get<n>()访问每个"容器"或索引,其中nindexed_by部分中指定的索引的基于0的顺序。因此,要按插入顺序迭代元素,您需要访问索引#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";