나는 multi_index_container와 index - ordered_unique를 가지고있다. 나는 내 값이 어떻게 든 정렬된다는 것을 안다. 내가 원했던 것은 std :: distance와 같은 O (n) 알고리즘을 사용하지 않고 값의 정확한 순서 색인을 찾는 것입니다.boost :: multi_index_container의 order value index
typedef multi_index_container<
MyStruct,
indexed_by<
ordered_unique<member< MyStruct, int, &MyStruct::id> >,
ordered_non_unique<member< MyStruct, int, &MyStruct::salary> >
>
> MyStructsContainer;
.... 여기
MyStructsContainer myStructsContainer;
MyStructsContainer::iterator it1 = myStructsContainer.emplace(MyStruct{ 3, 20 }).first;
MyStructsContainer::iterator it2 = myStructsContainer.emplace(MyStruct{ 1, 100 }).first;
MyStructsContainer::iterator it3 = myStructsContainer.emplace(MyStruct{ 2, 20 }).first;
IT1, IT2 및 IT3 RandomAccessIts는 없다. 따라서 색인을 찾는 유일한 방법은 다음과 같습니다.
size_t idx = distance(myStructsContainer.begin(), it1); <--- is there any other and smarter way to find the ordered index??
assert(idx == 2);
다른 방법이 있습니까?
덕분에, 칼린
아니요. 방금 문제를 정리하기 위해 수정했습니다. 주문 된 색인이 필요합니다. 그것에 대해 2 은 1입니다. 1 .... – Kiko
@ KalliMan 내 답변을 업데이트했습니다. – sehe
고마워요, 이것은 내 작업의 한 부분으로 작동합니다. 하지만 안타깝게도 나는 emplase 직후 색인을 얻고 싶습니다 .... 같은 방법으로 최적화하기 위해 두 방법을 결합 할 수도 있지만 솔루션이 완벽하지는 않습니다. – Kiko