1
사용자 지정 비교기 클래스에서 C++ 벡터를 정렬 할 때 이상한 동작이 발생합니다.사용자 지정 비교기를 사용하여 벡터 정렬을 그냥 반전합니다.
다른 배열의 일부 값을 기반으로 인덱스 배열을 정렬하려고합니다. 그러나 내가 알 수있는 한 정렬 함수는 색인을 바꿉니다. 필자는 compare 함수의 일부 로깅을했는데, 정상적으로 작동하는 것 같습니다.
내가 뭘 잘못하고 있는지 알아볼 수있는 사람이 있습니까?
내 코드 :
template<class T>
class Comparator {
vector<T> & data;
public:
bool operator()(int a, int b) {
return data.at(a) < data.at(b) ? -1 : (data.at(a) > data.at(b) ? 1 : 0);
}
Comparator(vector<T> & data) : data(data) {}
};
void sortTest2() {
//SETUP
int n = 5;
vector<int> indexes(n);
newIdAr(indexes, n); //init to {0,1,2,3,4}
vector<double> data(n);
randomData(data, n); //Init to radom data
Comparator<double> comparator(data);
//TEST
print(indexes, data, n); // Prints [0.00125126, 0.563585, 0.193304, 0.808741]
sort(indexes.begin(), indexes.end(),comparator);
print(indexes, data, n); // Prints [0.808741, 0.193304, 0.563585, 0.00125126]
sort(indexes.begin(), indexes.end(),comparator);
print(indexes, data, n); // Prints [0.00125126, 0.563585, 0.193304, 0.808741]
cout << "Shuffle" << endl;
random_shuffle(indexes.begin(), indexes.end());
print(indexes, data, n);
sort(indexes.begin(), indexes.end(), comparator);
print(indexes, data, n);
}
내 출력 : 보조 기능
[0.00125126, 0.563585, 0.193304, 0.808741, 0.585009]
[0.585009, 0.808741, 0.193304, 0.563585, 0.00125126]
[0.00125126, 0.563585, 0.193304, 0.808741, 0.585009]
Shuffle
[0.193304, 0.00125126, 0.585009, 0.563585, 0.808741]
[0.808741, 0.563585, 0.585009, 0.00125126, 0.193304]
코드 :
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void print(vector<int> & sort, vector<double> & data, int N) {
cout << "[";
for (int i = 0; i < N - 1; ++i) {
cout << data[sort[i]] << ", ";
}
cout << data[sort[N - 1]] << "]" << endl;
}
void newIdAr(vector<int> & ar, int N) {
for (int i = 0; i < N; ++i) {
ar[i] = i;
}
}
void randomData(vector<double> & data, int n) {
for (int i = 0; i < n; ++i) {
data[i] = ((double) rand())/RAND_MAX;
}
}