使用自定义比较器反转输入的向量排序 < >在自定义比较器类中对C++向量进行排序时会出现一些奇怪的行为。

使用自定义比较器反转输入的向量排序 < >在自定义比较器类中对C++向量进行排序时会出现一些奇怪的行为。,c++,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

我想根据另一个数组中的一些值对索引数组进行排序。但就我所见,排序函数只是反转了我的索引。我对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);
}
辅助功能的代码:

#包括
#包括
#包括
使用名称空间std;
无效打印(矢量和排序、矢量和数据、整数N){

cout如果第一个参数低于第二个参数,则比较器应返回true,否则返回false。返回0、-1和1在代码中无效

您可以通过分析比较器的
运算符()
签名来实现这一点:

bool operator()(int a, int b)
我认为你的实施应该是:

bool operator()(int a, int b) {
    return data.at(a) < data.at(b);
}
bool运算符()(int a,int b){
返回数据.at(a)
bool operator()(int a, int b)
bool operator()(int a, int b) {
    return data.at(a) < data.at(b);
}