比较器在 stl.
Comparator in 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;});
相关文章:
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- 比较两个std::矢量/阵列,或者通常比较两个stl连续器
- 比较器在 stl.
- 通过函数指针对类内的 STL SET 使用自定义比较器
- STL映射比较器能否以某种方式获取指向映射本身的指针?
- STL 中的最小堆,不带比较器
- C++ STL . 自定义比较器如何工作?
- 是在STL中使用的COMP比较器是从未更改的STL比较比较STL中的对象
- 如何使用特定构造函数使用STL Priority_queue 比较器
- 为什么仅通过模板指定STL设置比较器
- 我们可以使用异构查找比较器对 STL 关联容器执行"partial-match"搜索吗?
- STD :: SET(或STD :: MAP)是否有一个提供基于值的查找的STL比较器?STD :: lands_les
- C - 如何正确地将比较器传递到STL功能
- STL 映射自定义比较器
- STL地图 - 何时使用自定义比较器
- 如何使用初始数据和自定义比较器声明 stl::p riority_queue
- STL中的比较器
- 为什么C++ STL 容器使用 "less than" 运算符<而不是 "equal equal" 运算符== 作为比较器?
- C++/STL默认比较器
- 如何编写带有中间变量的比较器以进行 stl 排序