我有一个由2个索引索引的multi_index_container。我能够通过其中一个找到值,但是可以从其他相应的索引中找到迭代器吗?
示例:
struct ById{};
struct ByName{};
typedef multi_index_container<
MyStruct,
indexed_by<
ordered_unique<tag<ById>, member< MyStruct, int, &MyStruct::id> >,
ordered_non_unique<tag<BySalary>, member< MyStruct, int, &MyStruct::salary> >
>
> MyStructsContainer;
typedef MyStructsContainer::index<ById>::type MyStructsContainerById;
typedef MyStructsContainer::index<BySalary>::type MyStructsContainerBySalary;
...
MyStructsContainerById& byId = myStructsContainer.get<ById>();
MyStructsContainerById::iterator itById = byId.find(3);
问题是,是否有一种简单的方法可以找到相应的:
MyStructsContainerByName::iterator itBySalary
指向完全相同的值(* itById)?
谢谢, 卡林
答案 0 :(得分:0)
您正在寻找boost::multi_index::project
给定带有索引i1和i2的
multi_index_container
,我们说比i1-iteratorit1
和i2-iteratorit2
等效,如果:
it1==i1.end()
和it2==i2.end()
OR
it1
和it2
指向相同的元素。
在您的样本中
auto& byId = myStructsContainer.get<ById>();
auto itById = byId.find(3);
你可以使用
MyStructsContainerByName::iterator itBySalary = project<1>(
myStructsContainer, itById);
或确实:
auto itBySalary = project<BySalary>(myStructsContainer, itById);
具有完全相同的效果