提高:: multi_index_container的:查找其他指标迭代指数迭代器(boost::m

2019-10-21 18:13发布

我有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)?

谢谢,卡林

Answer 1:

您正在寻找boost::multi_index::project

http://www.boost.org/doc/libs/1_36_0/libs/multi_index/doc/reference/multi_index_container.html#projection

给定multi_index_container与指标I1和I2,我们说不是一个I1-迭代器it1和I2-迭代器it2是等价的,如果:

  • it1==i1.end()it2==i2.end()

要么

  • it1it2指向相同的元件。

在您的样品

auto& byId = myStructsContainer.get<ById>();
auto itById = byId.find(3);

你可以使用

MyStructsContainerByName::iterator itBySalary = project<1>(
      myStructsContainer, itById);

或者实际上:

auto itBySalary = project<BySalary>(myStructsContainer, itById);

具有完全相同的效果



文章来源: boost::multi_index_container: Find index iterator from other index iterator