比较器在 stl.

  • 本文关键字:stl 比较器 c++ stl
  • 更新时间 :
  • 英文 :

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,但排序函数如何将 0 和 1 作为参数并根据 compareIntervals 进行排序,因为排序函数看起来像 sort(arr, arr+n, 0( 或 sort(arr, arr+n, 1(

当你写sort(arr, arr+n, compareInterval)时,compareInterval函数不会立即调用。 那将是sort(arr, arr+n, compareInterval())(这是行不通的(。

因此,std::sort的第三个参数没有得到bool值。 它获取指向函数compareInterval的指针。 然后,它可以使用此指向函数的值对各种Interval对象对根据需要多次调用compareInterval,以确定要排序的元素的正确顺序。

您提供给sort作为第 3 个参数的函数在内部排序逻辑需要时被调用(根据实现的排序算法(。排序函数选择使用哪些参数来调用函数。 您可以在此处阅读有关它的更多信息:http://en.cppreference.com/w/cpp/algorithm/sort

代替比较函数,您可以直接在 std::sort 中编写 lambda。

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;});

最新更新