从矢量计算总降雨量
C++ Calculate total rainfall from a vector
我有一个数据集,其中包含多年来每个月的总降雨量信息。我需要用每年的月份来计算历年的总降雨量,并输出相应的年份。使用getter将数据集放入类对象的向量中,允许我提取诸如温度最高的年份和月份之类的信息。
~snip
我不太确定我应该如何继续这件事。我要把每年的降雨量用循环加12次吗?或者有更好的方式继续谈下去?在我被批评之前,我确实尝试了很多东西,但都不起作用,所以我在这里问。
我已经成功地从数据集中打印出当月的最高降雨量,如下所示:
~snip
使用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();
}
假设你有你的数据在一个矢量和数据存储在文件中,年复一年,你可以提供一个谓词搜索向量年(使用lambda在c++ 11或写一元谓词作为一个函子对象):
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::多重映射
为记录创建一个结构。
将文件中的记录读入std::vector
。
为要索引(排序)的每个字段创建一个std::map
。关键字段将是表中列的数据类型。像这样:
std::map<double, unsigned int> temperature_index;
value字段,在上面的例子中是unsigned int,将是vector中元素的索引。
通过拥有多个索引表,您可以以任何您想要的顺序引用vector,而无需对vector进行排序。你甚至可以有不同的排序方案。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 计算缩放多边形的比例,得到给定的多边形面积
- 在C++中如何在没有pow的情况下进行基础计算
- 计算平均值,不包括上次得分
- 从矢量计算总降雨量