2016-10-19 63 views
-2

我有一個叫雨的結構。它是這樣的定義結構陣列排序功能

struct Rain{ 
    string month; 
    string year; 
    double rainfall; 
} 

我有這些數組(雨[240]),我想排序使用排序算法。這是我的嘗試:

sort(rain.rainfall, rain.rainfall + 240); 

,但我得到:

member reference base type 'Rainfall_data [240]' is not a structure or union 
    sort(rain.rainfall, rain.rainfall + 240); 
     ~~~~^~~~~~~~~ 

我只是想知道是否有可能使用的排序算法,這樣一來,如果是的話我做了什麼錯,它不管用?

謝謝你的幫助。

+0

錯誤消息並不一致與結構的名稱。你真正的結構叫做「Rainfall_data」嗎? – user463035818

+0

「sort」的參數必須是一個數組。 'rain.rainfall'不是一個數組。陣列只是「下雨」。如果你想按降雨排序,你必須提供一個比較函數來比較兩個結構的成員。 – Barmar

回答

3

通常最方便的嵌入功能到類/結構:

struct Rain { 
    string month; 
    string year; 
    double rainfall; 
    bool operator < (const Rain& r1) const { 
     return (rainfall < r1.rainfall); 
    } 
}; 

現在,他們可以進行排序,如基本類型:

std::sort(rain, rain + 240); 
1

您需要創建一個比較函數,您可以將其傳遞給sort,該函數知道如何比較兩個不同的對象Rain

bool RainLess(const Rain &r1, const Rain &r2) 
{ 
    return r1.rainfall < r2.rainfall; 
} 

std::sort(rain, rain+240, RainLess); 
+0

hmm,過去只在排序函數中使用了兩個參數。你能否向我解釋一下第三個參數的用途以及它的作用?謝謝Mark – Elchapo

+0

@Elchapo第三個參數總是存在,但它默認爲'std :: less',它使用'operator <'來比較這兩個對象。如果第一個參數被認爲小於第二個參數,它應該返回「true」。 –

+0

謝謝!這樣做更有意義,你已經把我放在了正確的軌道上。祝你今天愉快 – Elchapo