gpt4 book ai didi

c++ - 错误排序 vector 对象 C++

转载 作者:行者123 更新时间:2023-11-30 01:24:27 24 4
gpt4 key购买 nike

当我尝试对自定义对象的 vector 进行排序时,我遇到了一个奇怪的问题。我有这段代码:

class Chromosome {
public:
Chromosome(int c_w);
void setFitness(double fit);
double getFitness() const;
};

比较函数:

bool compareChromosomes(const Chromosome* l, const Chromosome* r) {
return l->getFitness() <= r->getFitness();
}

我创建了染色体 vector :vector<Chromosome*> popv;然后我添加一些染色体。

当我尝试使用 sort(popv.begin(), popv.end(), compareChromosomes); 对 vector 进行排序时

这是结果:

排序前:

染色体 0:0.205595

染色体 1:0.370121

染色体 2:0.363655

染色体 3:0.363655

染色体 4:0.858721

染色体 5:0.192359

染色体 6:0.582279

染色体 7:0.202899

染色体 8:0.205105

染色体 9:0.187058

排序后

染色体 0:-0.474942

染色体 1:0.187058

染色体 2:0.192359

染色体 3:0.202899

染色体 4:0.205105

染色体 5:0.205595

染色体 6:0.363655

染色体 7:0.363655

染色体 8:0.370121

染色体 9:0.582279

问题出在哪里?

最佳答案

您的比较函数并不严格 - 对于两个相等的染色体,它为 compareChromosomes 返回 true(无论顺序如何)。将您的条件替换为strict less:

bool compareChromosomes(const Chromosome* l, const Chromosome* r) {
return l->getFitness() < r->getFitness();
// |
// <, not <=
}

关于c++ - 错误排序 vector 对象 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13590214/

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