我注意到默认情况下,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。
谢谢, 卡林
答案 0 :(得分:0)
是的,你可以信赖它。来自docs:
索引#0的功能可以直接从multi_index_container对象访问,而不使用
get<0>()
:例如,es.begin()
相当于es.get<0>().begin()
。