std::map 的比较参数对严格排序有什么要求?
What are the requirements of std::map's compare parameter regarding strict ordering?
我有一个整型,它表示一个环缓冲区索引。less比较函数定义如下:
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;
}
如果rhs发生在Lhs以上的一半可用间隔内,则认为Lhs低于rhs。我想在地图中使用它作为关键,但不确定它是否会导致问题。它具有非自反性和非对称性,但不具有及物性。
这会引起问题。如cppreference所述,比较器必须满足以下要求:
-
cmp(a,a)
产率false
- 如果
cmp(a,b)
生成true,则cmp(b,a)
生成false
- 如果
cmp(a,b)
==true
和cmp(b,c)
==true
,那么cmp(a,c)
也必须是true
(这不会被比较器满足) - 如果
a
和b
比较相等,则cmp(a,b)
和cmp(b,a)
都产生false
相关文章:
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有输出的合并排序我做错了什么?
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 在 C++20 中对概念约束函数进行排序的规则是什么?
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- 此气泡排序代码中的错误是什么?
- 堆排序,我无法弄清楚我的代码出了什么问题,输出顺序不正确
- 在 C++ 中,以相反顺序排序的最快方法是什么?
- 插入排序:我做错了什么?
- 我的C++合并排序代码有什么问题?
- 多次对容器进行排序,使用什么容器和什么方法
- 使用c 中的sort()函数对字符串进行排序的最坏情况是什么是什么
- 这种快速排序算法有什么问题?
- 不确定我的排序算法出了什么问题
- 随机化超大文件内容排序的有效方法是什么?
- 我的选择排序功能C 有什么问题
- 按特定值升序对字符串进行排序.我的实施中出了什么问题?
- "Debug assertion failed" 这种有什么问题?它应该按年份对包含电影对象的动态列表进行排序