从列表中打印元素

print element from list

本文关键字:元素 打印 列表      更新时间:2023-10-16

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

我在考虑根据我需要得到的东西对列表进行排序。例如,按温度排序,并显示最后一个温度。

排序很慢。仅仅为了对数据进行分析而进行排序是糟糕的。

为什么不在列表中添加项目时跟踪最大值和最小值呢?可以使用包装器类。

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

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

我们需要知道ListNode是什么样子才能给出一个确切的答案,但我认为你正在寻找类似cout << p->getTemp();的东西

首先,您可能不应该为此使用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());