【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小时内删除。
发表评论