簡體   English   中英

std :: equal_range是否需要嚴格的弱排序?

[英]Does std::equal_range require strict weak ordering?

我看到一些有關較舊的非標准equal_range的文檔,這些文檔顯式地調用了嚴格的弱排序(較舊的SGI文檔)和一些較新的標准的equal_range而不是此類(cppreference,libstdc ++文檔)。

函數是否已更改,以至於以前需要嚴格的弱排序,而現在卻需要...某種名稱不正確的分區?

std::equal_range要求要檢查的序列必須用表達式pr(value, N)pr(N, value)進行划分 ,其中pr是謂詞, value是要為其找到相等范圍的值, N是序列的元素。

對於序列,這比要求必須以嚴格的弱排序對序列進行排序的條件要弱。 它只需要有一個分區點P,其中pr(N, value)對P之前的序列中的所有元素N都返回truepr(value, N)P或之后的序列中的所有元素均返回false 例如,序列[2、1、5、4]被<和值3分割,分割點位於值為5的元素上。

對於謂詞本身, equal_range要求關於value不對稱,即pr(N, value)意味着! pr(value, N) 序列的所有N的! pr(value, N) 特別是,這意味着pr(X, X)可以返回true ,對於嚴格的弱排序則不是這種情況。 嚴格弱排序的要求/屬性是:

  • 不對稱: pr(x, y)暗示! pr(y, x) ! pr(y, x)
  • 不自反性: pr(x, x) == false
  • 可傳遞性: pr(x, y) && pr(y, z)表示pr(x, z)
  • ! pr(x, y) && ! pr(y, z) ! pr(x, y) && ! pr(y, z)意味着! pr(x, z) ! pr(x, z) (在編程元素中,這通過附加的等價關系表示)

注意,這些點適用於序列的所有元素x,y。 在要求prequal_range然而,這不是謂詞的一般要求,但對於謂詞具體要求和特殊的價值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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