0 c++ set visual-studio-2010 assertion
我的代码在我的Visual Studio 2010上有一些问题,但在DevCPP上却没有.在这种情况下,我set在我的代码中使用了C++ STL 来插入,pair<string, double>但后来我希望我set使用值而不是键对它们进行排序,所以我使用自定义比较器来实现这一点.
struct sortPairSecond
{
bool operator()(const pair<string, double> &lhs, const pair<string, double> &rhs)
{
return lhs.second >= rhs.second;
}
};
Run Code Online (Sandbox Code Playgroud)
代码在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) ;
}
};
Run Code Online (Sandbox Code Playgroud)
从本质上讲,不要试图std::set通过尝试操纵谓词来"破坏" 打算使用的内容.
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |