[英]Does greater operator “>” satisfy strict weak ordering?
定義:
令
<
為二元關系,其中a < b
表示“a
小於b
”。
讓
>
成為二元關系,其中a > b
表示“a
大於b
”。
因此,我們假設<
和>
具有我們通常在日常生活中使用的含義。 雖然,在某些編程語言(例如 C++)中,我們可以重載它們以賦予它們不同的定義,此后我們不再考慮這一點。
上下文:
據我閱讀嚴格弱排序的數學定義(例如Wikipedia ),我認為<
和>
都滿足它。 但是,我在許多網站上看到的所有示例都僅指<
。 甚至有一個網站說
他們大致的意思是,嚴格的弱排序必須表現出“小於”的行為方式:如果 a 小於 b,則 b 不小於 a,如果 a 小於 b 且 b 小於 c,則 a小於 c,以此類推。
此外,在 N4140(C++14 國際標准)中,嚴格的弱排序定義為
(§25.4-4)如果我們將
equiv(a, b)
定義為,comp(a, b) && !comp(b, a)
,那么要求comp
和equiv
都是傳遞關系
其中comp
定義為
(§25.4-2)
Compare
的是 function object 類型 (20.9)。 應用於類型為Compare
的 object 的 function 調用操作的返回值,當上下文轉換為bool
(第 4 條)時,如果調用的第一個參數小於第二個參數,則返回true
,否則返回false
。Compare comp
始終用於假設排序關系的算法。
問題:
">" 是否滿足嚴格的弱排序? 我希望如此,但沒有信心。
更大的運算符“>”是否滿足嚴格的弱排序?
數學上的嚴格大於關系是嚴格的弱排序。
至於 C++ 語言中的運算符: 對於所有整數類型:是。 一般來說:不,但在大多數情況下是的。 同樣適用於嚴格小於運算符。
至於令人困惑的引用, “小於”在該上下文中旨在傳達這意味着排序操作的最終結果是非遞減序列,即對象“小於”或等於它們之后的對象。 如果std::greater
用作比較 object,則較大的值按順序“較小”。
這可能會造成混淆,但並非旨在排除嚴格大於運算符。
> 不滿足嚴格弱排序的情況是什么?
一些例子:
>
不指向同一數組的指針上的運算符具有未指定的結果。>
不滿足 IEEE-754 表示中浮點類型的非自反性要求,除非從域中排除 NaN。 即使標准為任意Compare
函數引用“小於”,也僅在 ordering 的上下文中暗示“小於”。
如果我通過比較定義排序 function [](int a, int b) { return a > b; }
[](int a, int b) { return a > b; }
,則如果一個元素的 integer 值更大,則該元素在此排序中“小於”另一個元素。 那是因為我創建的排序是整數的反向排序。 您不應該在排序中將<
讀為“小於”。 你應該把它讀作“來之前”。
只要x < y
是嚴格的弱排序,那么x > y
也是嚴格的弱排序,只是順序相反。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.