And*_*ndy 10 c++ sorting stl operator-overloading functor
我有一个包含Widget类对象的stl :: list.它们需要根据Widget类中的两个成员进行排序.
为了使分类工作,必须定义一个比较两个Widget对象的比较器.似乎有无数种方法可以做到这一点.从我可以收集到的,人们可以:
一个.在类中定义比较运算符重载:
bool Widget::operator< (const Widget &rhs) const
Run Code Online (Sandbox Code Playgroud)
湾 定义一个带有两个小部件的独立函数:
bool operator<(const Widget& lhs, const Widget& rhs);
Run Code Online (Sandbox Code Playgroud)
然后让Widget类成为它的朋友:
class Widget {
// Various class definitions ...
friend bool operator<(const Widget& lhs, const Widget& rhs);
};
Run Code Online (Sandbox Code Playgroud)
C.定义一个仿函数,然后在调用sort函数时将其作为参数包含在内:
class Widget_Less :
public binary_function<Widget, Widget, bool> {
bool operator()(const Widget &lhs, const Widget& rhs) const;
};
Run Code Online (Sandbox Code Playgroud)
有谁知道哪种方法更好?特别是我有兴趣知道我是否应该做1或2.我搜索了Scott Meyer的书"有效STL",但遗憾的是它没有任何关于此的说法.
谢谢您的回复.
Soa*_*Box 11
如果您只是将两个小部件相互比较,请使用成员operator <.如果您要将Widget与其他内容进行比较,请定义一个全局operator <(两个参数版本,可选地是Widget类的朋友,但这是一个单独的问题.
如果你正在做一些不那么正统的东西,你真的只想要的Functor.如果"小于"比较在小部件的上下文中没有意义,请选择仿函数.在这种情况下,operator <可能会令人困惑.当然,仿函数仍然需要提供一个排序,但仅仅因为它是一个排序并不意味着它是一个"小于"的操作.(例如,按人口排序状态对于算子来说可能更好operator <.