自定义排序功能

时间:2014-03-16 05:56:47

标签: c++ sorting

我有一个班级

class Foo {
  private:
    unsigned int n;
    std::vector<double> label;

  public:
    //Methods for getting/setting the private variables
    std::vector<double>& getLabel(){ //This method is NOT exclusively used for sorting
      return label;
    }
}

我有另一个包含Foo矢量的类,我想根据标签对矢量进行排序。

bool OtherClass::sort(const Foo &a, const Foo &b){
  for unsigned int i=0; i< a.getLabel().size(); i++){
    if (a.getLabel().at(i) != b.getLabel().at(i)){
      return a.getLabel().at(i) < b.getLabel().at(i);
    }
  }

  return false;
}

然而,这无法编译。我认为这与我调用getLabel()的事实有关,编译器需要我确保函数是常量。如果我将排序功能修改为:

bool OtherClass::sort(const Foo &a, const Foo &b){
  Foo A, B;
  A=a;
  B=b;
  for unsigned int i=0; i< A.getLabel().size(); i++){
    if (A.getLabel().at(i) != B.getLabel().at(i)){
      return A.getLabel().at(i) < B.getLabel().at(i);
    }
  }

  return false;
}

这显然是一个愚蠢的解决方法,我真的很想理解:

  1. 为什么第一个版本无法编译
  2. 为什么第二个版本编译
  3. 如何在不改变(即添加const)getLabel()方法的情况下修改第一个版本并进行编译

0 个答案:

没有答案