我在结构体中有一个函数,用于对结构体中的向量进行排序。但是为了比较向量中的两个元素,我需要同一结构体中的另一个变量的值。我想知道我应该在哪里保持操作符重载或比较函数的这种工作。我在下面的粘贴中给出了一个示例。
#include<vector>
#include<algorithm>
struct Square{
int color; //value 1 to 10
};
struct State{
vector<Square> list;
int color_weight[] = {4,3,5,2,4,1,6,4,5,9}; //These values keep changing.
bool operator<(Square& a, Square& b);
void sortTheList();
};
bool State::operator<(Square& a, Square& b){
if (color_weight[a.color]< color_weight[b.color]){
return true;
}
return false;
}
void Square::sortTheList(){
sort(list.begin(),list.end());
}
当然,这行不通。我为比较函数尝试了许多其他签名和作用域,但似乎都不起作用。
你知道这里可以做什么吗?
您将使用一个比较器来保持对它需要的额外状态的引用,而不是operator<
。像这样:
struct CompareWeight {
CompareWeight(int const * weight) : weight(weight) {}
bool operator()(Square const & lhs, Square const & rhs) {
return weight[lhs.color] < weight[rhs.color];
}
int const * weight;
};
void Square::sortTheList() {
std::sort(list.begin(), list.end(), CompareWeight(color_weight));
}