簡體   English   中英

更大的運算符“>”是否滿足嚴格的弱排序?

[英]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) ,那么要求compequiv都是傳遞關系

其中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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM