struct Interval
{
int start, end;
};
// Compares two intervals according to staring times.
bool compareInterval(Interval i1, Interval i2)
{
return (i1.start < i2.start);
}
int main()
{
Interval arr[] = { {6,8}, {1,9}, {2,4}, {4,7} };
int n = sizeof(arr)/sizeof(arr[0]);
// sort the intervals in increasing order of
// start time
sort(arr, arr+n, compareInterval);
compareInterval将返回true或false,但sort函数如何将0和1作为参数并根据compareIntervals排序,因为sort函数看起来像sort(arr,arr + n,0)或sort (arr,arr + n,1)
答案 0 :(得分:4)
当您编写sort(arr, arr+n, compareInterval)
时,不会立即调用compareInterval
函数。那将是sort(arr, arr+n, compareInterval())
(这不会起作用)。
因此std::sort
没有为其第三个参数获得bool
值。它获得了一个指向函数compareInterval
的指针。然后,它可以使用此指针到函数值,根据需要多次调用compareInterval
,使用各种Interval
个对象来确定正在排序的元素的正确顺序。
答案 1 :(得分:1)
只要内部排序逻辑需要,就会调用sort
作为第3个参数提供的函数(根据实现的排序算法)。 sort函数选择调用函数的参数。
您可以在此处详细了解:http://en.cppreference.com/w/cpp/algorithm/sort
您可以直接在std :: sort中编写lambda而不是compare函数。
Interval arr[] = { {6,8}, {1,9}, {2,4}, {4,7} };
int n = sizeof(arr)/sizeof(arr[0]);
std::sort(arr, arr+n, [](Interval& i1, Interval& i2) {return i1.start < i2.start;});