gpt4 book ai didi

c++ - 排序操作后添加到 vector 的垃圾值

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

我有一个 vector称为键,用于排序,我有 struct comp :

typedef std::list<std::vector<WayPoint> >::iterator pathIt;
typedef std::pair<double, pathIt> Pair;
struct comp{
bool operator()(const Pair& lhs,const Pair& rhs) const
{
return lhs.first*1000000 <= rhs.first*1000000;
}
};
std::list<std::vector<WayPoint> > paths;
std::vector<Pair> keys;

在程序中,我有一个 std::sortkeys 上操作:

std::sort(keys.begin(), keys.end(),comp());

我在 Pair 前后打印了容器(sort 元素的第一个值)并注意到一些垃圾被添加到 keys排序后。我在 compare function 中做错了什么吗? ?注意:我在 comp 函数中计算出,乘以 1000000 是比较 double 的好方法。对吧?

谢谢

更新:除了 <= 的问题在必须替换为 < 的比较器中,我需要更多关于双值比较的说明:可能我很困惑,但为什么在 SO analysing the methods for comparing double 中有这么多问题?值(value)观?如果处理器可以正确比较 double ,为什么严格建议不要使用 double作为 std::map 中的关键?我混淆了两个不相关的话题吗?是上面的乘法 Unnecessary A wrong way to implement a necessary requirement ?

最佳答案

您的比较器功能不正确。它计算小于或等于。比较器必须严格计算小于。如果您的 vector 包含多个具有相同值的元素,这可能会导致错误。

我不知道这是否是您垃圾的来源,但这是我要解决的第一件事。如果这没有帮助,请在评论中告诉我。

此外,如评论中所述,比较器中的乘法完全没有必要。

关于c++ - 排序操作后添加到 vector 的垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28060435/

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