2017-09-18 75 views
2

我有以下結構:C++:如何檢查具有特定屬性的對象存在於一組

struct dependence { 
    dependence() {} 
    dependence(string CUid, LID sink, LID source, std::string var) 
    : CUid(CUid), sink(sink), source(source), var(var) {} 

    string CUid; 

    LID sink = 0; 
    LID source = 0; 
    std::string var; 
}; 

現在我想插入此結構的物體在一組。我有與CUid相同的對象,但(重要的!)其他屬性(sink,source,var)可以不同。我想要防止在集合中插入與CUid相同的對象。所以我知道的唯一方法是遍歷整個集合並檢查CUid的每個對象。有更少的代碼來檢查這個更好的方法嗎?

+1

使用自定義比較器的['的std :: set'](http://en.cppreference.com/w/cpp/container/set),其檢查'CUid'? –

+1

定義比較中只使用CUid的自定義比較器(或者覆蓋struct的'<'運算符)。示例[here](https://stackoverflow.com/questions/16894700/c-custom-compare-function-for-stdsort)。 – hnefatl

回答

4

您可以使用定製比較器來定義對象將存儲在集合中的順序。

struct cmp 
{ 
    bool operator()(const dependence &a,const dependence &b) const 
    { 
     return a.CUid < b.Cuid; 
    } 
}; 

然後

std::set<dependence,cmp> myset; 

現在,如果你嘗試插入與同一CUid對象,只有第一個實例會在myset

編輯:

另一種方法是重載<運營商。

bool operator<(const dependence &a,const dependence &b) 
{ 
    return (a.CUid<b.CUid); 

} 

然後

std::set<dependence> myset; 
+0

此外,您可以通過查看'myset.insert(cuid).second'來知道它是否先前存在於集合中。如果插入了「bool」,則設置爲「true」;如果以前存在,則爲「false」。 – Caduchon

+0

@YSC剛添加它。 –

+0

@Caduchon如何使用'myset.insert(cuid).second'?我的集合是一組「依賴」對象。所以'insert'函數不會收到'dependency'對象? 'cuid'只是一個字符串 –

相關問題