簡體   English   中英

如何使用 C++ 中的 sort() 對 class 對象數組進行排序

[英]How to sort class objects array using the sort() in C++

我正在做一個編程問題,需要對 class 對象進行排序。

所以,我使用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對這些對象進行排序。

排序是關於比較元素並知道哪一個比另一個“低”(即,如果我將{5,3,1}排序為{1,3,5} ,這是因為1低於33低於超過5 )

因此,這取決於您希望為排序算法遵循什么樣的邏輯(例如,您可以通過它們的成員int dur對它們進行排序)。 sort()使用<運算符進行排序,因此您有兩種選擇:

  1. 重載<運算符,如下所示<= 我建議您這樣做,例如:
bool operator<(CallLog a, CallLog b)
{
    return a.dur < b.dur;
}
  1. 您實際上可以使用 lambda,如在此示例中 <= 請注意,即使它顯示了如何使用 lambdas 執行此操作,它也表明編寫<運算符會更好。 同樣在這里,還有一個易於閱讀的示例,說明如何將 function 傳遞給sort()

預定義的 STL function 對象,位於 FUNCTIONAL header 文件中。 function 對象對應於所有主要的 C++ 運算符。 在表中,字母 T 表示任何 class,無論是用戶編寫的還是基本類型。 變量 x 和 y 表示 class T 的對象,傳遞給 function object 作為 ZDBC11CAA5BDA29F77E6FB4EDDABD8。 “布爾 = 更大(T,T)x > y 布爾 = 更少(T,T)x < y”。 此外,如果您願意,您可以編寫自己的 function 對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM