我有一个班级
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;
}
这显然是一个愚蠢的解决方法,我真的很想理解: