2012-10-01 71 views
3

在C++中,std :: set :: insert()只在沒有一個值爲'value'的情況下插入一個值。同樣,這是否意味着運算符==或者是否意味着運算符<對於任一次排序都是錯誤的,還是意味着其他什麼?對於std :: set,相同的「值」是什麼意思?

+1

關鍵概念:「嚴格的弱排序」 – Nemo

回答

5

是否表示運算符<對於任一次排序都爲false?

是的,如果該組使用默認比較器並使用<比較鍵。更一般地,在具有比較器Compare的有序容器中,兩個鍵​​和k2被認爲是等效的如果是!Compare(k1,k2) && !Compare(k2,k1)

密鑰不需要實現operator==或其他任何東西;他們只需要使用容器的比較器進行比較即可獲得strict weak ordering

2

std::set有一個名爲'比較」模板參數在此簽名:

template < class Key, class Compare = less<Key>, 
     class Allocator = allocator<Key> > class set; 

Compare用於確定元素之間的順序。這裏,默認less<Key>使用<運算符來比較兩個鍵。

如果有幫助,你可以把一組只是一個std::map無意義的值,即std::set<int>可以被認爲是一個std::map<int, int>其中的值是沒有意義的。

1

set被允許在T上執行的唯一比較是通過它作爲模板的一部分進行比較的仿函數類型。因此,這就是它如何定義等價性。

對於set中的每個值,對於該值與新值之間的兩個排序之一,比較必須評估爲true。如果它對於任何值都是錯誤的,那麼它將不被存儲。

+2

這意味着浮點'NaN'不能成爲'set '的成員。 –

相關問題