3

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ここで、実行時に、2 つのインデックスのいずれかを実行したいと考えています。実際に使用されるインデックスは、現在の構成によって異なります。私が達成しようとしているのは、次のようなものです。

// 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。2つに共通のベースタイプはありますか? 私の例を見ると、どのSomeTypeように見える必要がありますか? for使用される可能性のあるすべてのインデックスに対して、コード内でループを繰り返したくありません。

4

1 に答える 1