2016-10-24 1 views
2

私はリングバッファのインデックスを表す整数型を持っています。このように定義少ない比較関数:RHSはLHS上記の利用可能期間の半分で行われている場合右辺よりも小さいと考え厳密な注文に関するstd :: mapのcompareパラメータの要件は何ですか?

friend bool operator < (const CircularValue & lhs, const CircularValue &rhs) { 
    UInt max = lhs.value + std::numeric_limits<UInt>::max()/2; 
    return (lhs.value < max) 
     ? rhs.value > lhs.value && rhs.value < max 
     : rhs.value > lhs.value || rhs.value < max; 
} 

LHS。 地図でキーとして使用したいのですが、問題が発生する可能性があるかどうかはわかりません。それは非再帰性と非対称性の性質を持ちますが、推移性はありません。

答えて

2

問題が発生します。 cppreferenceで説明したように、次の要件は、コンパレータによって満たされている必要がありますcmp(a,b)は真、そしてcmp(b,a)利回りfalse

  • が得られた場合

    • cmp(a,a)false
    • を生み出すcmp(a,b) == truecmp(b,c) == trueならば、 cmp(a,c)trueである必要があります(これはコンパレータでは満たされません)
    • abは等しく、その後cmp(a,b)cmp(b,a)収率の両方を比較することであるfalse
  • 関連する問題