关于boost multiindex默认元素排序

时间:2015-02-04 07:35:47

标签: boost multi-index

我注意到默认情况下,multi_index_container中的项目按第一个索引排序。

示例:

typedef multi_index_container<
MyStruct,
indexed_by<
    ordered_unique<member< MyStruct, int, &MyStruct::id> >,
    ordered_non_unique<member< MyStruct, int, &MyStruct::salary> >
>
> MyStructsContainer;


int _tmain(int argc, _TCHAR* argv[])
{
    MyStructsContainer myStructsContainer;

    MyStructsContainer::iterator it1 = myStructsContainer.emplace(MyStruct{ 1, 100 }).first;
    assert(distance(it1, myStructsContainer.end()) == 1 );
    MyStructsContainer::iterator it2 = myStructsContainer.emplace(MyStruct{ 2, 20 }).first;
    assert(distance(it1, myStructsContainer.end()) == 2);
}

我的问题是 - 这是一个记录在案的,一个“众所周知”的行为,我可以依赖它吗?或者只是副作用?

我有一个结构列表“MyStruct”,它们应按ID分类。但由于某种原因,我必须从排序队列中知道他们的数字索引。如果我可以使用这种方法,那么就不需要对1-st有序索引进行查找,然后std :: distance。

谢谢, 卡林

1 个答案:

答案 0 :(得分:0)

是的,你可以信赖它。来自docs

  

索引#0的功能可以直接从multi_index_container对象访问,而不使用get<0>():例如,es.begin()相当于es.get<0>().begin()