【C++】标准库sort函数的⾃定义排序  ⾃定义排序需要单独写⼀个compare函数
例1 LeetCode 056. Merge Intervals
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
1/**
2 * Definition for an interval.
3 * struct Interval {
4 *    int start;
5 *    int end;
6 *    Interval() : start(0), end(0) {}
7 *    Interval(int s, int e) : start(s), end(e) {}
8 * };
9*/
10class Solution {
11public:
12    vector<Interval> merge(vector<Interval>& ins) {
13if (pty())
14return vector<Interval>{};
15        vector<Interval> res;
16        sort(ins.begin(), d(), [](Interval a, Interval b){return a.start < b.start;});
17        res.push_back(ins[0]);
18
19for (int i = 1; i < ins.size(); i++) {
20if (res.back().end < ins[i].start)
21                res.push_back(ins[i]);
22else
23                res.back().end = max(res.back().end, ins[i].end);
24        }
25return res;
26    }
27 };
  函数写法:
1/**
2 * Definition for an interval.
3 * struct Interval {
4 *    int start;
5 *    int end;
6 *    Interval() : start(0), end(0) {}
7 *    Interval(int s, int e) : start(s), end(e) {}
8 * };
9*/
10bool mySort(const Interval &a, const Interval &b) {
11return a.start < b.start;
12 }
13class Solution {
14public:
15    vector<Interval> merge(vector<Interval>& ins) {
16if (pty())
17return vector<Interval>{};
18        vector<Interval> res;
19        sort(ins.begin(), d(), mySort);
20        res.push_back(ins[0]);
21
22for (int i = 1; i < ins.size(); i++) {
23if (res.back().end < ins[i].start)
merge函数24                res.push_back(ins[i]);
25else
26                res.back().end = max(res.back().end, ins[i].end);
27        }
28return res;
29    }
30 };
  注意到compare函数写在类外,这是因为
  std::sort要求函数对象,或是静态/全局函数指针,⾮静态成员函数指针不能直接传递给std::sort

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。