【问题标题】:How to sort class objects array using the sort() in C++如何在 C++ 中使用 sort() 对类对象数组进行排序
【发布时间】:2021-05-28 01:12:37
【问题描述】:

我正在做一个需要对类对象进行排序的编程问题。

所以,我使用sort() 对对象数组进行排序,但我做不到,我在某处读到它需要 lambda 表达式,但我还不知道它们。

所以,如果你能通过对 lambda 表达式的一些解释来帮助我解决这个问题,那就太好了。

#include<bits/stdc++.h>
using namespace std;

class CallLog{
    public:
    string pno;
    int dur;
    string da;
    void setpno(string p_no) {pno = p_no;}
    void setdur(int d) {dur = d;}
    void setda(string dsa) {da = dsa;}
    string getpno() {return pno;}
    int getdur() {return dur;}
    string getda() {return da;}
};

int main() {
    int n;
    cin >> n;
    CallLog arr[n];
    for(int i = 0; i < n; i++) {
        string pno;
        int dur;
        string da;
        cin >> pno >> dur >> da;
        arr[i].setpno(pno);
        arr[i].setdur(dur);
        arr[i].setda(da);
    }
    sort(arr, arr+n, "what labmda expression to write?" );
    for(int i = 0; i < n; i++) {
        cout << "DialledNumber : " << arr[i].getpno() << ", Duration : " << arr[i].getdur() << ", Date : " << arr[i].getda() << "\n";
    }
}

我想根据int dur 对这些对象进行排序。

【问题讨论】:

  • 专业提示: C++ 不支持可变长度数组 (VLA)。因此,cin &gt;&gt; n; CallLog arr[n]; 之类的语句是无效的。相反,使用std::vector 或动态内存分配与newdelete 对。
  • 感谢@RohanBari 的提示

标签: c++ class sorting object lambda


【解决方案1】:

排序是关于比较元素并知道哪一个比另一个“低”(即,如果我将{5,3,1} 排序为{1,3,5},这是因为1 低于33 是低于5)

因此,这取决于您希望对排序算法遵循什么样的逻辑(例如,您可以按其成员 int dur 对它们进行排序)。 sort() 使用 &lt; 运算符进行排序,因此您有两种选择:

  1. &lt;运算符重载为shown here
bool operator<(CallLog a, CallLog b)
{
    return a.dur < b.dur;
}
  1. 您实际上可以使用 lambda,如 this example < 运算符会更好。 Also here,有一个易于阅读的示例,说明如何将函数传递给 sort()

【讨论】:

  • 请注意,正如 Rohan Bari 所述,使用 std::vector 是一种方式
  • 感谢您的见解
  • 谢谢先生,终于如愿以偿了!
  • 重载的operator&lt; 应该通过常量引用而不是值来获取其参数:bool operator&lt;(const CallLog &amp;a, const CallLog &amp;b) 您也可以将operator 实现为CallLog 的成员,例如:class CallLog { public: ... bool operator&lt;(const CallLog &amp;rhs) const { return dur &lt; rhs.dur; } };
【解决方案2】:

预定义的 STL 函数对象,位于 FUNCTIONAL 头文件中。有对应于所有主要 C++ 运算符的函数对象。在表中,字母 T 表示任何类,无论是用户编写的还是基本类型。变量 x 和 y 代表 T 类的对象作为参数传递给函数对象。 “布尔 = 更大(T,T)x > y bool = less(T, T) x

【讨论】:

    猜你喜欢
    • 2011-08-19
    • 2016-11-20
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    相关资源
    最近更新 更多