2012-10-10 25 views
1

這是我的previous question的後續,其中我想知道在std :: set中存儲非重複任意數據的最有效方法。C++中的矢量唯一性

答案有用地指出,對於自定義類,您需要實現運算符<(如果我理解正確的話)。

但是我的特定數據類型是一個向量(在數學意義上)。我想要做的就是在該集合中存儲一個新的矢量,只要它不存在。爲此,我如何在兩個向量之間實現小於運算符?當有3個正交維度進行比較時,似乎沒有意義。我可以用什麼策略來做到這一點?

回答

1

std :: set可以接受任何執行嚴格弱比較的比較類作爲其第二個模板參數,它不必是'<'運算符。只要寫一個比較,作爲'<'會:

struct Compare { 

    bool operator()(const T& left, const T& right) const { 
    if (left.dimension1 < right.dimension1) return true; 
    if (left.dimension2 < right.dimension2) return true; 
    return left.dimension3 < right.dimension3; 
    } 

}; 
+0

這從編程和數學的角度來看都有意義。很明顯,你使用的<僅用於使集合起作用,並不意味着暗示對具有任何「好」數學性質的數學向量的排序。 – djechlin

+0

是的,但這不是<但仍然用於(間接)確定平等,因此唯一性?另外,給定示例中的代碼如何與實際使用set的代碼一起工作? – Gigi

+0

您可以像這樣聲明集合:std :: set item(Compare()); – Ian