stl 算法中不同类型的严格弱排序
Strict weak ordering of different types in stl algorithms
我有一个类定义了与其他类型的严格弱排序,我想在该类的容器上使用基于比较的算法(例如 std::upper_bound(。
该标准定义容器的前向迭代器值类型应为类似类型的类型,因此以下内容不编译:
template<typename T>
class Foo {
public:
bool operator<(const T& _val) { return val < _val; }
//operator T() { return val; } // uncommenting this solves the problem
private:
T val;
};
void bar() {
vector<Foo<int>> foos(10);
auto i_lb = std::lower_bound(foos.begin(), foos.end(), 17); // compiles and works, though I don't know why
auto i_eq = std::equal_range(foos.begin(), foos.end(), 17); // error! not convertible to int
}
我找不到使用接受谓词的算法版本的方法(也要求类型相同(。定义转换运算符使此示例有效,但定义转换运算符并不总是正确的。使这种比较起作用的正确方法是什么?
顺便说一下,用std::lower_bound替换std::equal_range是有效的,但我无法弄清楚为什么。
equal_range必须以两种方式比较值以确定它们是否相等
当
(!(a<b) && !(b<a))
时,一个值a
被视为等价于另一个值b
lower_bound只需要找到范围的一端。
您的比较仅适用于Foo < T
,而不适用于T < Foo
.
相关文章:
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 对任何类型的元素数组进行排序
- 带有枚举方向/类型的气泡排序结构数组
- MOVNTI 存储是否相对于由同一线程创建的其他 MOVNTI 存储重新排序?
- 标准::map键类型的严格弱排序概念
- 无法使用接口类型对priority_queue中的对象进行排序<T>
- 是否使用cv::Point2f类型重载std::排序
- 按类型排序向量并按类型或派生类型搜索
- C++ MDC final-在字符类型的数组结构中按字母顺序对记录中的名称进行排序
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 我对C 中共享指针列表进行排序的功能未完成类型
- C 使用单个函数对具有多种值类型的数组排序
- 排序时引用绑定到 'value_type' 类型的 null 指针
- 如何对对象数组进行排序,而不考虑对象变量类型
- CRTP 模式 但是在数据结构中存储非同构类型
- 为什么我的气泡排序不适用于双精度数据类型?
- 按相互包含对类型进行排序
- 具有双重类型的C++快速排序问题
- C++列表::排序<未解析的重载函数类型>
- 是否可以在运行时定义要在STXXL中排序的类型的长度