關於c++中strict weak ordering的一些筆記

來源:互聯網
上載者:User

STL中某些演算法,比如sort,binary_search等,都要求對象有一個良好定義的strict weak ordering。嚴格弱序是一種嚴格偏序,但是滿足一個額外的條件,即對於集合中的兩個元素x,
y,滿足以下條件,

即若x, y之間沒有可比性,那麼x和y等價。若還存在元素z,使得 x ~ z 或者 y ~ z,那麼x ~ y ~ z,這是傳遞性。

顯然,對於任意一個元素x,x與x自身是等價的(根據嚴格弱序的定義)。

c++中使用嚴格弱序來定義等價,而不是利用==來定義,這樣我們只需要保證一個良好定義的<,就能夠保證sort的正確性。

有時候我們的對象擁有多個可以比較的成員時(多個主鍵),我們該如何定義呢?我們知道如何比較string,string是根據逐個字元的比較來確定之間的順序。比如對於abc, abd,我們先比較前兩個字元,發現相等,於是我們比較最後一個字元發現c < d,於是abc < abd,這就是字典序(lexicographical order)。我們也可以採用類似的思路來對多個主鍵進行比較,但是需要注意相等這個概念,在嚴格弱序中,這個被稱為等價,而用
< 來表示這個等價關係,即有

所以,假設有兩個對象a, b,並且有主鍵

如果我們能夠找到一個j,使得j滿足

並且有q,滿足

那麼

參考:

[1] http://en.wikipedia.org/wiki/Weak_ordering

[2] http://en.wikipedia.org/wiki/Equivalence_class

[3] http://www.sgi.com/tech/stl/StrictWeakOrdering.html (注意,這裡對於嚴格弱序的定義中使用了antisymmetric,這個是不對的,應該是非對稱,即asymmetric)。

[4] http://www.drdobbs.com/author/Andrew-Koenig(這裡有關於ordering的好幾篇文章)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.