列表中的打印元素

时间:2011-07-22 21:16:48

标签: c++ list element

我有一个列表,打印出一年的天气数据。数据按月列出,我需要在列表排序后找到年度总计。我使用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。我不知道如何只显示临时而不显示列表的其余部分。

2 个答案:

答案 0 :(得分:3)

  

我正在考虑按照我需要的方式对列表进行排序。例如,按temp排序,并显示最后一个temp。

排序很慢。 baa只是为了对数据进行分析而进行排序。

为什么在向列表中添加项目时不跟踪最大值和最小值?也许有一个包装类。

如果由于某种原因这是不可行的(你可以使用O(n)查找),你可以在列表中搜索你正在寻找的值的记录,但我仍然不会为此修改原始数据。

  

我不知道如何只显示temp而不显示列表的其余部分。

我们需要知道ListNode的样子才能给出确切的答案,但我认为您正在寻找类似cout << p->getTemp();的内容。

答案 1 :(得分:2)

首先,您可能使用std::list。您没有显示任何内容以表明它是一个不错的选择,并且在其方向上没有特定指示,std::list通常是最后选择要使用的容器。就此而言,即使你认为你直接有一个特定的指示,很可能仍然非常好,这对于糟糕的选择来说是平庸的。

其次,要获得最小值或最大值,您通常只想分别使用std::min_elementstd::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());