从结构体访问数据时,操作符重载到哪里去了?



我在结构体中有一个函数,用于对结构体中的向量进行排序。但是为了比较向量中的两个元素,我需要同一结构体中的另一个变量的值。我想知道我应该在哪里保持操作符重载或比较函数的这种工作。我在下面的粘贴中给出了一个示例。

#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));
}

相关内容

  • 没有找到相关文章

最新更新