使用带有Boost multi_index的sublevel结构索引

时间:2014-08-29 18:49:34

标签: boost-multi-index

我正在尝试使用Boost multi_index解决问题。 如果我有2个结构如下:

struct MyStruct1
{
    int x;
    int y;
};

struct MyStruct2
{
   int a;
   MyStruct1 b;
};

如何使用MyStruct2 :: b.x定义索引? 这可能吗?

尝试的是:

struct xIndex{};

typedef multi_index_container<
    MyStruct2,
    indexed_by<
        ordered_unique<
            tag<xIndex>,
            member<MyStruct2, int, &MyStruct2::a::x>
        >
    >
> MyContainer;

但这不起作用。

感谢您提供任何信息/建议。

1 个答案:

答案 0 :(得分:1)

有几种方法可以实现这一目标,但所有这些方法都要求您编写一些样板代码。最简单的是提供user-defined key extractor

struct MyStruct2XExtractor
{
  typedef int result_type;

  int operator()(const MyStruct2& m)const
  {
    return m.b.x;
  }
};

...

typedef multi_index_container<
    MyStruct2,
    indexed_by<
        ordered_unique<
            tag<xIndex>,
            MyStruct2XExtractor
        >
    >
> MyContainer;