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