繁体   English   中英

< 没有成员的 class 的运算符

[英]< operator for a class with no members

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

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

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

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

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

如果您需要某种实际排序但并不真正关心它是什么(例如,将元素放入std::map ),您可以return this < &rhs以按地址进行比较。 请注意,这不适用于std::sort() ,因为当算法交换值时,它们的地址不会改变,但std::mapstd::set ,因为它们不依赖于移动值。 请参阅以下 Peter 的评论以获取警告。

最后,请注意没有成员的 class 仍然消耗一个字节的存储空间。 您可以在不增加空间的情况下将uint8_tchar存储在 class 中,并将其用作排序标准。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM