2016-01-20 52 views
0

我在集合中有一個集合,我想爲集合定義一個新的順序,但順序取決於類的屬性。我應該如何實現它? 我試過這樣的事情C++定義一個集合中的集合的訂單

class myclass{ 
    int c; 
    set<int,cmp> myset; 
    struct cmp{ 
     bool operator()(const unsint a, const unsint b) 
     const { 
      return (depends on c) ; 
      } 
    }; 
} 

但它沒有工作。任何幫助表示讚賞,謝謝。

編輯:問題是,我不知道先驗。這是我在輸入中獲得的一個價值,然後它總是一樣的。

+1

你有[mcve]嗎? – NathanOliver

回答

0

return (depends on c) ;

我認爲這不是好主意,以comapare功能依賴於c,因爲你set對象已經建成的樹和不重建被std::set支持。

另外,請注意,std::set要求比較器,其中符合嚴格弱排序規則

你可以閱讀'Compare' documentationwikipedia

更多關於你的問題,你可以創建另一組與另一個比較功能,然後在這裏複製的內容。

typedef std::set<int, cmp2> anotherSet; 
std::copy(std::begin(firstSet), std::end(firstSet), std::inserter(anotherSet)); 

但是,它看起來像你其實並不需要std::set如果您有它取決於一些參數進行重新排序。考慮使用另一種數據結構,如向量或列表。此外,如果您需要〜O(log N)訪問複雜性,則可以將數據組織到您的向量中的heap

+0

很好的答案,謝謝!如果我不知道先驗的價值怎麼辦?我可以在獲取值(運行時)後創建結構cmp嗎? – wewe