2016-03-02 66 views
0

看來我可以爲一個結構定義一個運算符,並使用std :: sort進行排序 - 我所看到的問題是它看起來像我只能定義一個排序方法。我想根據其他字段定義兩個其他字段。是否可以定義更多?按不同字段排序結構隊列

否則,我能想到的唯一的其他事情就是將結構移動到一個向量中,並使用爲每種排序定義的函數對向量進行排序。我很好地處理它,但我想知道是否有一個更理想的方式來處理隊列中結構的字段排序。

例如,這個結構...

struct job 
{ 
    int id; 
    int start; 
    int end; 

    bool operator<(Process const &other) { return start < other.start; } 
}; 

queue<jobSet> 

我知道我可以成立一個布爾通過開始排序...

sort(begin(jobSet), end(jobSet)); 

但我不知道如何另設那種與結束現場工作

+0

目前尚不清楚你想要完成什麼。我的猜測是你想根據上下文對不同類型的對象進行不同的排序?你可以將你自己的比較器傳遞給'std :: sort',這樣很容易實現。你應該澄清你的問題,如果這不是你想要的。 – Srikanth

+0

好的我已經添加了示例代碼 – cpd1

回答

1

U可以定義你的自定義比較排序,即

struct compareStart{ 
    bool operator<(Job const& a, Job const& b) { return a.start < b.start; } 
} 

struct compareEnd{ 
    bool operator<(Job const& a, Job const& b) { return a.end < b.end; } 
} 

然後你可以使用它像

sort(begin(jobSet), end(jobSet), compareStart()); 
sort(begin(jobSet), end(jobSet), compareEnd()); 

或者,如果你有C++ 11個lambda表達式使用:

sort(begin(jobSet), end(jobSet), [](Job const& a, Job const& b) { return a.end < b.end; }); 

您不必使用作業對象的comparisson oprator

+0

好的 - 我想我必須與比較運算符一起工作。這是有幫助的..謝謝! – cpd1