【发布时间】:2015-11-05 14:47:37
【问题描述】:
我正在为 TPS 编写遗传算法。我有从 std::vector 派生的类 Chromosome 并且具有成员资格。我想对染色体群进行排序。 IMO 我的 operator
bool Chromosome::operator<(const Chromosome & rhs) const
{
const Chromosome& lhs = *this;
if (lhs.fitness < rhs.fitness)
return true;
else
{
unsigned int size = lhs.size();
unsigned int zeroCityIndexlhs = std::find(lhs.begin(), lhs.end(), 0) - lhs.begin();
unsigned int zeroCityIndexrhs = std::find(rhs.begin(), rhs.end(), 0) - rhs.begin();
for (unsigned int i = 1; i < size; i++)
{
if (lhs[(zeroCityIndexlhs + i) % size] < rhs[(zeroCityIndexrhs + i) % size])
return true;
else if (lhs[(zeroCityIndexlhs + i) % size] == rhs[(zeroCityIndexrhs + i) % size])
continue;
else
return false;
}
return false;
}
}
染色体 A 小于染色体 B,当它具有较小的适应度或相同的适应度并且从城市 0 开始的道路在字典上小于 B 中的道路时。程序编译但在排序时(使用 std::sort ()),运行时错误显示为“调试断言失败!...无效比较器”。
【问题讨论】:
-
如果你拿了两条特定的染色体,
assert failedoperator<(a, b) == operator<(b, a)呢? -
std::vector是什么?换句话说,您确定包含的对象上的operator<是正确的。 -
顺便说一句,当您有退货声明时,您不需要
else。
标签: c++