boost :: multi_index_container:从其他索引迭代器中查找索引迭代器

时间:2015-02-03 21:30:00

标签: boost multi-index

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

谢谢, 卡林

1 个答案:

答案 0 :(得分:0)

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

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

  

给定带有索引i1和i2的multi_index_container,我们说比i1-iterator it1和i2-iterator it2等效,如果:

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

OR

     
      
  • it1it2指向相同的元素。
  •   

在您的样本中

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

你可以使用

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

或确实:

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

具有完全相同的效果