2010-02-24 25 views
5

我有一個std :: set與Compare類,它需要額外的參數來比較鍵。這個變量參數是在運行時確定的,我將它打包在集合的鍵中,以使其可以被比較訪問。將更多數據傳遞給std:set比較類

但是,該參數在邏輯上屬於該集而不是按鍵,所以該解決方案看起來很笨拙並且在所有按鍵上重複相同的值。

是否有一種優雅的方式將其他參數傳遞給Compare類? (我首先想到了set :: value_comp,但它返回比較對象的值,而我需要一個參考)。

謝謝。

回答

0

性病的定義::集:

template < 
     class Key, 
     class Traits=less<Key>, 
     class Allocator=allocator<Key> 
> 
class set 

所以性狀是應該是你比較運營商,但如果想看看構造函數,你能在那裏再次看到它:

explicit set(
    const Traits& _Comp 
); 

所以只需將您的實例傳遞給構造函數。 (注意它是通過複製完成的)

+0

這個答案是正確的,但我發現很難遵循。澄清:你需要創建一個帶有額外參數的比較對象,然後將該對象傳遞給std :: set構造函數。在構建集合之後不要嘗試修改參數。 –

+0

@Mark Ransom - 如果排序規則發生變化,那麼整個集合都必須重建。如果參數不影響排序順序,則可以通過引用或指針將其傳遞給Traits。 – Dewfy

+0

沒有辦法重建一套,除了複製到一個新的,所以我支持我的聲明。給定相同的輸入組時,比較對象必須始終返回相同的值,否則該組可能會出現故障。 –