2016-10-19 66 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