[英]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都返回true
, pr(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。 在要求pr
在equal_range
然而,這不是謂詞的一般要求,但對於謂詞具體要求和特殊的價值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.