作者yamakazi (大安吴彦祖)
看板C_and_CPP
标题[问题] 利用sort排序vector
时间Wed Jan 17 11:00:58 2018
开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
G++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
#include <vector>
#include <algorithm>
问题(Question):
以下程式
建立一个struct comInterval
其中Interval是额外宣告的structure
利用<algorithm>的sort做排序
我比较不明白的是
sort(intervals.begin(),intervals.end(),compInterval());
送入第三个参数的方法
请问这个方法是运算子多载吗??
有没有正确的术语呢
不知道该从何查起
喂入的资料(Input):
无
预期的正确结果(Expected Output):
无
错误结果(Wrong Output):
无
程式码(Code):(请善用置底文网页, 记得排版)
class Solution {
public:
struct compInterval {
bool operator()(const Interval &a, const Interval &b) const {
return a.start<b.start;
}
};
vector<Interval> merge(vector<Interval> &intervals) {
sort(intervals.begin(),intervals.end(),compInterval());
vector<Interval> ret;
for(int i=0; i<intervals.size(); i++) {
if(ret.empty() || ret.back().end < intervals[i].start) // no overlap
ret.push_back(intervals[i]);
else // overlap
ret.back().end = max(ret.back().end, intervals[i].end);
}
return ret;
}
};
补充说明(Supplement):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.163.46.117
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1516158062.A.A42.html
2F:→ yamakazi: 这个网页我有查到 但我想知道实作这个方法的名字叫做?? 01/17 11:04
3F:→ loveflames: 第三个参数是比较函数 01/17 11:07
4F:→ loveflames: 随便取,但行为不能违反<的含意 01/17 11:07
5F:→ loveflames: compInterval()是临时物件,传入sort内部会以functor 01/17 11:15
6F:→ loveflames: 的形式去呼叫 01/17 11:15
7F:→ loveflames: 实作逻辑在compInterval::operator() 01/17 11:16
8F:→ notBeing: binary predicate 01/17 11:34
9F:推 TitanEric: 不知道算不算function pointer? 01/17 15:00
10F:→ loveflames: 这例子不算 01/17 15:10
11F:→ loveflames: 当然要传也是可以 01/17 15:11
12F:推 LPH66: 这里的概念是这个参数要能够当函式名呼叫 01/17 20:20
13F:→ LPH66: 能这麽做的物件就称做 functor, 实际实作是使用 operator() 01/17 20:21
14F:→ LPH66: 的运算子重载来定义其行为 01/17 20:21
15F:→ LPH66: 那这里在呼叫时也有一个(), 但这个不是 operator () 01/17 20:22
16F:→ LPH66: 而是单纯建立一个物件 (注意 compInterval 是类别名) 01/17 20:22
17F:→ LPH66: 这里的 () 表示建立物件後呼叫其预设建构子 01/17 20:23
18F:→ loveflames: 如果很在意inline,比较函数不要传函数指标 01/18 10:00
19F:→ loveflames: 只能传functor进去 01/18 10:00
20F:推 ak121ka: "function objects" by c+g primer 4/e p.530 01/19 12:37
22F:→ shk9cvu5ye: s/15378055 01/20 03:12