C ++计算向量的总降雨量

时间:2014-03-21 17:27:32

标签: c++ algorithm oop

我有一个数据集,其中包含有关每个月的总降雨量的信息。我需要使用每年的月份来计算所有年份的总降雨量,并输出相应的年份。数据集已经使用getter放入类对象的向量中,例如,允许我提取具有最高温度的年份和月份等信息。

~snip

我不太确定如何继续这样做。我是否将每年的降雨量加上12次?还是有更好的方法继续下去吗?在我预定之前,我确实尝试了很多东西,但它没有用,所以我在这里问。

我设法从数据集中打印出本月最高的降雨量,如下所示:

~snip

3 个答案:

答案 0 :(得分:0)

使用std :: map(http://en.cppreference.com/w/cpp/container/map)。你只需要一个循环。

以下是迭代dataVector的示例。

std::map<int,double> result;

for( std::vector<YourDataStruct>::iterator it = dataVector.begin(); it != dataVector.end(); ++it ) {

    if(result.count(it->getYear()) == 0)
        result[it->getYear()] = it->getRain();
    else
        result[it->getYear()] += it->getRain();
}

答案 1 :(得分:0)

假设您的数据在向量中并且数据以年为单位存储在文件中,您可以提供一个谓词来逐年搜索向量(在C ++ 11中使用lambda或将一元谓词写为仿函数对象) ):

double averageRainfall( std::vector<Rain>& year) {
    /* first record for a given year */
    std::vector<Rain>::iterator b = std::lower_bound( v.begin(), v.end(), year,
                               []( const Rain& r){ return ( r.year == year);});
    /* 1 past last record for a given year */
    std::vector<Rain>::iterator e = std::upper_bound( v.begin(), v.end(), year,
                        []( const Rain& r){ return ( r.year == year);}));
    /* calculate the sum */
    double sum = std::accumulate( b, e , 0.0);
    /* and average */
    double mean = sum / std::distance( b, e);
    return mean;
}

std::lower_bound


您应该考虑使用某种多键映射,即std::multimap< int, std::vector<Rain> >作为数据结构来保存您的记录。处理信息会更容易。

std::multimap

答案 2 :(得分:0)

为您的记录创建结构。

将文件中的记录读入std::vector

为每个要编制索引(排序)的字段创建std::map。关键字段将是表格中列的数据类型。像这样:

std::map<double, unsigned int> temperature_index;

上面示例中的值字段unsigned int将是向量中元素的索引。

通过使用多个索引表,您可以按任何顺序引用矢量,而无需对矢量进行排序。您甚至可以使用不同的订购方案。