我有一个列表,打印出一年的天气数据。数据按月列出,我需要在列表排序后找到年度总计。我使用list.sort()函数按月对列表进行排序。从那里,我需要打印一个特定的数据元素,但我不确定如何这样做。这是未排序列表的示例:
Weather data:
Month temp rainfall
2 60 2.0
4 75 3.4
1 50 1.5
如何打印特定温度或降雨量?在这种情况下,max temp = 75.这就是我使用list.sort()的方式:
// ListNode class not included
bool shift_Months( ListNode M1, ListNode M2 )
{
if( M1.getMonth() < M2.getMonth() ) return true;
return false;
}
int main ()
{
ListNode M;
list<ListNode> Mlist;
list<ListNode>::iterator p;
int i;
Mlist.sort( shift_Months );
for( i=0,p=Mlist.begin(); i<Mlist.size()-1; i++,p++ )
cout << *p;
return 0;
}
我正在考虑按照我需要的方式对列表进行排序。例如,按temp排序,并显示最后一个temp。我不知道如何只显示临时而不显示列表的其余部分。
答案 0 :(得分:3)
我正在考虑按照我需要的方式对列表进行排序。例如,按temp排序,并显示最后一个temp。
排序很慢。 baa只是为了对数据进行分析而进行排序。
为什么在向列表中添加项目时不跟踪最大值和最小值?也许有一个包装类。
如果由于某种原因这是不可行的(你可以使用O(n)
查找),你可以在列表中搜索你正在寻找的值的记录,但我仍然不会为此修改原始数据。
我不知道如何只显示temp而不显示列表的其余部分。
我们需要知道ListNode
的样子才能给出确切的答案,但我认为您正在寻找类似cout << p->getTemp();
的内容。
答案 1 :(得分:2)
首先,您可能不使用std::list
。您没有显示任何内容以表明它是一个不错的选择,并且在其方向上没有特定指示,std::list
通常是最后选择要使用的容器。就此而言,即使你认为你做直接有一个特定的指示,很可能仍然非常好,这对于糟糕的选择来说是平庸的。
其次,要获得最小值或最大值,您通常只想分别使用std::min_element
或std::max_element
:
struct by_month {
bool operator()(ListNode const &a, ListNode const &b) {
return a.GetMonth() < b.GetMonth();
}
};
std::vector<ListNode> data;
std::cout << std::max_element(data.begin(), data.end(), by_month());