【发布时间】:2011-01-27 01:26:43
【问题描述】:
我有一个包含 Widget 类对象的 stl::list。它们需要按照 Widget 类中的两个成员进行排序。
为了使排序工作,必须定义一个比较两个 Widget 对象的小于比较器。似乎有无数种方法可以做到这一点。据我所知,可以:
一个。在类中定义比较运算符重载:
bool Widget::operator< (const Widget &rhs) const
b.定义一个带有两个 Widget 的独立函数:
bool operator<(const Widget& lhs, const Widget& rhs);
然后让 Widget 类成为它的朋友:
class Widget {
// Various class definitions ...
friend bool operator<(const Widget& lhs, const Widget& rhs);
};
c。定义一个仿函数,然后在调用排序函数时将其作为参数包含:
class Widget_Less :
public binary_function<Widget, Widget, bool> {
bool operator()(const Widget &lhs, const Widget& rhs) const;
};
有人知道哪种方法更好吗?特别是我很想知道我应该做 1 还是 2。我搜索了 Scott Meyer 的《Effective STL》一书,但不幸的是它对此没有什么可说的。
感谢您的回复。
【问题讨论】:
-
看来我错过了 Effective STL 的第 46 条。它说更喜欢仿函数而不是成员函数,因为它可以更容易地内联。
-
我知道执行选项 A(类的成员函数)要容易一些。但是你应该将这个论点与什么进行比较?一个简单的
return (x<y),其中 y 是参数不起作用...至少对我来说不是,我遇到了段错误。
标签: c++ sorting stl operator-overloading functor