gpt4 book ai didi

c++ - C++ 设置比较器上的 Visual Studio 断言失败

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:58 25 4
gpt4 key购买 nike

我的代码在我的 Visual Studio 2010 上有一些问题,但在 DevCPP 上没有。这是情况,我使用了 C++ STL set在我的代码中插入 pair<string, double>但后来我想要我的 set使用值而不是键对它们进行排序,因此我使用自定义比较器来实现这一点。

struct sortPairSecond
{
bool operator()(const pair<string, double> &lhs, const pair<string, double> &rhs)
{
return lhs.second >= rhs.second;
}
};

代码在 DevCPP 中运行良好,但在使用 VS2010 的 xtree 上遇到调试断言失败。我做了一些调试,我意识到错误是由在自定义比较器中使用 >= 引起的,消除了 = 使代码工作但不正确的结果,因为我的程序中应该允许重复值。因此有人可以帮助我解决这个问题吗?

最佳答案

您使用 >= 而不是 > 可能无效,因为它需要严格排序,因此 op(a,b)op(b,a) 不能都为真(但如果它们相等则它们会为真)。

这只是一个断言错误,但是 set 不能包含重复值。只需使用排序的 vector 或者您可以使用 multiset (并使用 '>')

当然,因为我们知道第一个值是唯一的,所以我们可以在第二个值等于第一个值时扩展谓词以比较第一个值。这将保证您的唯一值,然后您仍然可以使用 std::set

struct sortPairSecond
{
bool operator()(const pair<string, double> &lhs, const pair<string, double> &rhs) const
{
return (lhs.second > rhs.second) || (lhs.second == rhs.second && lhs.first > rhs.first) ;
}
};

从本质上讲,不要试图通过操纵谓词来“破坏”std::set 的用途。

关于c++ - C++ 设置比较器上的 Visual Studio 断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375885/

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