c++ - < 没有成员的类的运算符

标签 c++ sorting operator-overloading

有这方面的约定吗?它主要只需要在 STL 容器中进行排序。

我考虑了几种可能性,比如比较两个对象的地址,或者总是返回 true 但我不确定什么是最好的。排序算法总是会返回真正的困惑吗?

class empty {
    bool operator< (const empty& rhs) const {
        // ???
    }
}

附言 它可能发生在奇怪的情况下,例如当一个类仅基于#define 等获取成员变量时,或者当该类已经由其他人编写并且您不想从根本上更改它但您需要将它或一个类将其转置到某些需要小于运算符的容器中。

最佳答案

如果您想使类型“可排序”但实际上并不关心排序顺序,您可以使小于运算符始终返回 false。让它始终返回 true 会导致某些算法失败,因为如果 A<BB<A那么它就不是“严格的弱排序”。使运算符始终返回 false 表示所有实例都是等价的。如果使用稳定排序算法,则不会移动任何元素。

如果您需要某种实际排序但又不太关心它是什么(例如将元素放入 std::map ),您可以 return this < &rhs按地址比较。请注意,这不适用于 std::sort()因为当算法交换值时,它们的地址不会改变,但对于 std::map 是可以的和 std::set因为那些不依赖于移动值。请参阅下面来自 Peter 的评论以了解注意事项。

最后,请注意没有成员的类仍然占用一个字节的存储空间。你可以存储 uint8_tchar在类中不增加空间,并将其作为排序标准。

关于c++ - < 没有成员的类的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58889042/

相关文章:

javascript - 使用特定数字的最后一个访问 JavaScript 数组中的位置

sorting - 试图检查我的工作但如何打印()?

模板类上的 C++ 运算符重载

c++ - 如何寻址由另一个进程的给定 IUnknown* 标识的 COM 对象?

c++ - 尝试通过 C++ 程序设置代理。不起作用

c++ - 使用初始化列表中的引用初始化对象成员

C++ 重载 I/0 运算符 : Getting Past Ambiguity

c++ - C++ 数组中的 Gettin 左值错误

xml - 在 shell 中为 txt.txt 文件的每行创建新的文本文件

c++ - : expected constructor,析构函数错误,还是 '' token之前的类型转换?