作者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://www.ptt.cc/bbs/C_and_CPP/M.1516158062.A.A42.html
→ yamakazi: 這個網頁我有查到 但我想知道實作這個方法的名字叫做?? 01/17 11:04
→ loveflames: 第三個參數是比較函數 01/17 11:07
→ loveflames: 隨便取,但行為不能違反<的含意 01/17 11:07
→ loveflames: compInterval()是臨時物件,傳入sort內部會以functor 01/17 11:15
→ loveflames: 的形式去呼叫 01/17 11:15
→ loveflames: 實作邏輯在compInterval::operator() 01/17 11:16
→ notBeing: binary predicate 01/17 11:34
推 TitanEric: 不知道算不算function pointer? 01/17 15:00
→ loveflames: 這例子不算 01/17 15:10
→ loveflames: 當然要傳也是可以 01/17 15:11
推 LPH66: 這裡的概念是這個參數要能夠當函式名呼叫 01/17 20:20
→ LPH66: 能這麼做的物件就稱做 functor, 實際實作是使用 operator() 01/17 20:21
→ LPH66: 的運算子重載來定義其行為 01/17 20:21
→ LPH66: 那這裡在呼叫時也有一個(), 但這個不是 operator () 01/17 20:22
→ LPH66: 而是單純建立一個物件 (注意 compInterval 是類別名) 01/17 20:22
→ LPH66: 這裡的 () 表示建立物件後呼叫其預設建構子 01/17 20:23
→ loveflames: 如果很在意inline,比較函數不要傳函數指標 01/18 10:00
→ loveflames: 只能傳functor進去 01/18 10:00
推 ak121ka: "function objects" by c+g primer 4/e p.530 01/19 12:37
→ shk9cvu5ye: s/15378055 01/20 03:12