std::sort(begin, end)
에 대한 호출이 실제로 범위를 수정했는지 여부를 확인하는 가장 우아한 방법은 무엇입니까? 여기std :: sort (begin, end)가 범위를 수정했는지 확인
내 두 개의 아이디어가 있습니다 :
(A)를 확인하면 이미 정렬 O (N) :
if (already_sorted(begin, end)) { return false; }
std::sort(begin, end);
return true;
(b)의 비교에서 변경 내용 추적 (이 안전합니까?)
bool modified = false;
std::sort(begin, end, [&modified](T a, T b){ modified |= a<b; return a<b; });
return modified;
더 좋은 방법이 있습니까?
내 머리 꼭대기에서 나는 (b) 안전하다고 생각하지 않는다. 알고리즘은 comp (a, b) 대신에'comp (b, a)'를 테스트 할 수 있었고 결과가' false'. –
더 나은 질문은 범위가 이미 정렬되어 있는지를 알아야하는 이유입니다. 이미 정렬 된 범위를 "안전한"방식으로 처리하는 정렬 알고리즘을 선택해야합니다. 범위가 정렬 되었습니까? –
@ Jeff : 내 응용 프로그램에는 정렬 된 범위를 생성 할 가능성이있는 프로세스가 있습니다. 그렇지 않은 경우 몇 단계를 반복해야합니다. – Inverse