我有一个multi_index_container
看起来基本上是这样的:
struct MyStruct {
int a, b, c;
};
struct Tag1;
struct Tag2;
typedef multi_index_container<
MyStruct,
indexed_by<
hashed_non_unique<
tag<Tag1>,
composite_key<
MyStruct,
member<MyStruct, int, &MyStruct::a>,
member<MyStruct, int, &MyStruct::b>
>
>,
hashed_non_unique<
tag<Tag2>,
composite_key<
MyStruct,
member<MyStruct, int, &MyStruct::a>,
member<MyStruct, int, &MyStruct::b>,
member<MyStruct, int, &MyStruct::c>
>
>
>
> MyContainer;
我实例化这样一个容器并像这样使用它的索引:
MyContainer c;
MyContainer::index<Tag1>::type& index1 = c.get<Tag1>;
MyContainer::index<Tag2>::type& index2 = c.get<Tag2>;
现在,在运行时,我想对equal_range
两个索引之一进行操作。实际使用哪个索引,取决于当前配置。我想要完成的是这样的:
// Search in container
SomeType range;
if (useIndex1)
range = index1.equal_range(...);
else
range = index2.equal_range(...);
// Loop through range
for (auto i = range.first; i != range.second; ++i)
...
我不知道该怎么做。事实证明, 的返回类型index1.equal_range
是一对与 . 返回的迭代器不同的迭代器index2.equal_range
。两者有共同的基本类型吗?看看我的例子,应该是什么SomeType
样子?我不想for
在我的代码中为可能使用的每个索引重复循环。