我有一个数据集,其中包含有关每个月的总降雨量的信息。我需要使用每年的月份来计算所有年份的总降雨量,并输出相应的年份。数据集已经使用getter放入类对象的向量中,例如,允许我提取具有最高温度的年份和月份等信息。
~snip
我不太确定如何继续这样做。我是否将每年的降雨量加上12次?还是有更好的方法继续下去吗?在我预定之前,我确实尝试了很多东西,但它没有用,所以我在这里问。
我设法从数据集中打印出本月最高的降雨量,如下所示:
~snip
答案 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::multimap< int, std::vector<Rain> >
作为数据结构来保存您的记录。处理信息会更容易。
答案 2 :(得分:0)
为您的记录创建结构。
将文件中的记录读入std::vector
。
为每个要编制索引(排序)的字段创建std::map
。关键字段将是表格中列的数据类型。像这样:
std::map<double, unsigned int> temperature_index;
上面示例中的值字段unsigned int将是向量中元素的索引。
通过使用多个索引表,您可以按任何顺序引用矢量,而无需对矢量进行排序。您甚至可以使用不同的订购方案。