Я заметил, что по умолчанию элементы в 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", и они должны быть отсортированы по их идентификатору. Но мне почему-то надо узнать их числовой индекс из отсортированной очереди. Если я смогу использовать этот подход, это избавит от необходимости выполнять поиск по 1-му упорядоченному индексу, а затем по std::distance.
Спасибо, Калин