gpt4 book ai didi

c++ - 为 STL 排序算法定义 < - 运算符重载、仿函数或独立函数?

转载 作者:可可西里 更新时间:2023-11-01 15:51:42 26 4
gpt4 key购买 nike

我有一个包含 Widget 类对象的 STL::list。它们需要根据 Widget 类中的两个成员进行排序。

为了排序工作,必须定义一个比较两个 Widget 对象的小于比较器。似乎有无数种方法可以做到这一点。据我所知,可以:

一个。在类中定义一个比较运算符重载:

bool Widget::operator< (const Widget &rhs) const

定义一个采用两个小部件的独立函数:

bool operator<(const Widget& lhs, const Widget& rhs);

然后让 Widget 类成为它的友元:

class Widget {
// Various class definitions ...
friend bool operator<(const Widget& lhs, const Widget& rhs);
};

定义一个仿函数,然后在调用排序函数时将其作为参数包含在内:

class Widget_Less :
public binary_function<Widget, Widget, bool> {
bool operator()(const Widget &lhs, const Widget& rhs) const;
};

有人知道哪种方法更好吗?我特别想知道我应该做 1 还是 2。我搜索了 Scott Meyer 的《Effective STL》一书,但不幸的是它没有任何关于此的内容。

感谢您的回复。

最佳答案

如果您只是将两个小部件相互比较,请使用成员 operator < .如果您将 Widget 与其他东西进行比较,请定义一个全局 operator < (两个参数版本,可选的 Widget 类的 friend ,但这是一个单独的问题。

如果你做的事情不那么正统,你真的只需要仿函数。如果“小于”比较在小部件的上下文中没有意义,请选择一个仿函数。在那种情况下,有 operator <可能会令人困惑。当然,仿函数仍然需要提供一个排序,但仅仅因为它是一个排序并不意味着它是一个“小于”操作。 (例如,对于仿函数来说,按人口排序状态可能比 operator < 更好。

关于c++ - 为 STL 排序算法定义 < - 运算符重载、仿函数或独立函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2436705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com