【发布时间】:2015-01-05 19:57:56
【问题描述】:
我有一个成对向量。 我想以这样一种方式对这些对进行排序,即它们之间差异最小的对是第一个元素。例如。
(1,10),(2,5), (5,8), (1,2), (8,10)
排序后:
(1,2), (8,10), (2,5), (5,8) , (1,10)
我尝试过这样,但出现运行时错误:
bool compare(const pair<int, int>&i, const pair<int, int>&j)
{
if( (i.first-i.second) < (j.first-j.second) )
return i.first < j.first ;
else
return j.first < j.second;
}
【问题讨论】:
-
什么运行时错误?什么代码在调用它?尽量提供一个最小的完整代码示例。
-
呵呵。对问题的完全误读导致我写了这个有创意的位:coliru.stacked-crooked.com/a/b9fb36b7fba6d4a9
-
通常,尤其是在排序的情况下,您会希望使用函数对象而不是直接使用比较函数,因为对函数对象的 operator() 的调用通常可以内联。函数对象基本上实现了这里的人通过 operator() 建议作为比较函数的函数之一。在 c++11 中,您可以使用 function<...> 模板。
标签: c++ algorithm data-structures stl