gpt4 book ai didi

c++ - 从结构访问数据时,运算符重载去哪里了?

转载 作者:太空狗 更新时间:2023-10-29 20:29:58 25 4
gpt4 key购买 nike

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

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

关于c++ - 从结构访问数据时,运算符重载去哪里了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8536642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com