간단히 대답하면 배열을 정렬하기 전에 복사 한 다음 완료하면 복원하는 것입니다. 속도가 문제인 경우에만 더 복잡한 작업을 수행하십시오.
class Comparator
{
public:
explicit Comparator(const std::vector<float>& array) : array(array) {}
bool operator()(size_t a, size_t b) {return array[a] < array[b];}
private:
const std::vector<float>& array;
};
void Example(const std::vector<float> &floats)
{
std::vector<size_t> rank;
for (int i = 0; i < floats.size(); ++i) rank.push_back(i);
std::sort(rank.begin(), rank.end(), Comparator(floats));
std::cout << "First: " << floats[rank.front()] << std::endl;
std::cout << "Last: " << floats[rank.back()] << std::endl;
}
또는 :
C++에서
, 당신은, 왠지이 (테스트, 그리고 수레는 벡터에있는 가정하지 않음) 같은 것을 배열 값을 비교하는 사용자 정의 비교를 사용하여 인덱스의 배열을 정렬 할 수 여분의 메모리를 쓴다면, (float, rank) 쌍의 벡터를 만들 수 있고, float 값을 기반으로 정렬 할 수 있습니다. 이 방법은 qsort()
을 사용하는 C에서도 작동합니다.
"값에 따라 작동합니까?"는 것은 변경된다는 의미입니까? –
예. 내 질문을 더 명확하게 편집했습니다. –