c++如何根据月尺度数据,求月尺度的数据?

勤奋石头 2017-03-02 10:07:32
当然了excel等操作起来很容易~~
现在又一组数据,格式如下:
现在我的问题,是不知道如何来判定一个月结束了。
之前用的是根据arr[i][1]!=arr[i+1][1]来判定,也就是第二列变化了来判定
但是到最后一行数据时会有数组越界的状况
请教诸位有什么好一点的方法,根据日尺度的数据来统计月总量呢?
谢谢了~~~
...全文
125 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤奋石头 2017-03-08
  • 打赏
  • 举报
回复
引用 8 楼 jianwen0529 的回复:
[quote=引用 7 楼 qinfenshitou 的回复:] 再请教您一下。您这个程序我看懂了,也实现了~但是如果是处理多年的数据呢?计算每一年每一个月的总和~~~
如果数量不多,比如几千几万条,把key的类型换成string就可以,string保存年月字符串(前面有提到过) 又或者定义一个函数对象 struct SameYearMonth,用该函数对象去替换map默认排序规则 如果数据量很庞大,几十万上百万那你就要考虑内存和性能的问题 具体问题得具体分析,比如你的数据是怎么存储的,加载进内存是怎么组织的,性能的要求,内存的限制等等都要考虑的[/quote] 我的数据也就是几万条。谢谢您了~~ 你说的把key换为string,string保存年月的值。这个我是理解的。我先尝试一下吧~~~等再有什么疑问再回来~~多谢多谢~~帖子我先不结。。十分感谢你们
幻夢之葉 2017-03-07
  • 打赏
  • 举报
回复
引用 7 楼 qinfenshitou 的回复:
再请教您一下。您这个程序我看懂了,也实现了~但是如果是处理多年的数据呢?计算每一年每一个月的总和~~~
如果数量不多,比如几千几万条,把key的类型换成string就可以,string保存年月字符串(前面有提到过) 又或者定义一个函数对象 struct SameYearMonth,用该函数对象去替换map默认排序规则 如果数据量很庞大,几十万上百万那你就要考虑内存和性能的问题 具体问题得具体分析,比如你的数据是怎么存储的,加载进内存是怎么组织的,性能的要求,内存的限制等等都要考虑的
勤奋石头 2017-03-07
  • 打赏
  • 举报
回复
引用 5 楼 jianwen0529 的回复:
[quote=引用 4 楼 qinfenshitou 的回复:] [quote=引用 1 楼 jianwen0529 的回复:] 用个map很容易做到统计
能不能稍微详细点的给我说一下呢?谢谢了哦~~[/quote] map<int, int> myMap; // first 指定月份,second指定和 for(所有行) { myMap[月份] += 对应那行的数量(日量); } 或者 map<istring, int> myMap; // first 指定年月(比如192002),second指定和 for(所有行) { myMap[年月字串] += 对应那行的数量(日量); } 示例代码

#include <iostream>
#include <map>
using namespace std;

#define NUM_DATA 10

struct MyStruct 
{
    int year;
    int month;
    int day;
    int count;
}myData[NUM_DATA] = {
    {1920, 1, 9, 38},
    { 1920, 1, 10, 6 },
    { 1920, 1, 20, 14 },
    { 1920, 2, 1, 8 },
    { 1920, 2, 2, 0 },
    { 1920, 2, 3, 3 },
    { 1920, 3, 19, 32 },
    { 1920, 3, 20, 25 },
    { 1920, 3, 22, 10 },
    { 1920, 3, 26, 25 }
};


int main()
{
    map<int, int> myMap;
    for (int i = 0; i < NUM_DATA; i++)
    {
        myMap[myData[i].month] += myData[i].count;
    }

    map<int, int>::iterator it = myMap.begin();
    for (; it != myMap.end(); it++)
    {
        cout << (*it).first << " " << (*it).second << endl;
    }

    cout << "二月份的总量:";
    it = myMap.find(2);
    if (it != myMap.end())
    {
        cout << (*it).second << endl;
    }
    else
    {
        cout << 0  << "(没有找到二月份的数据)" << endl;
    }

    return 0;
}
[/quote] 再请教您一下。您这个程序我看懂了,也实现了~但是如果是处理多年的数据呢?计算每一年每一个月的总和~~~
勤奋石头 2017-03-03
  • 打赏
  • 举报
回复
引用 5 楼 jianwen0529 的回复:
[quote=引用 4 楼 qinfenshitou 的回复:] [quote=引用 1 楼 jianwen0529 的回复:] 用个map很容易做到统计
能不能稍微详细点的给我说一下呢?谢谢了哦~~[/quote] map<int, int> myMap; // first 指定月份,second指定和 for(所有行) { myMap[月份] += 对应那行的数量(日量); } 或者 map<istring, int> myMap; // first 指定年月(比如192002),second指定和 for(所有行) { myMap[年月字串] += 对应那行的数量(日量); } 示例代码

#include <iostream>
#include <map>
using namespace std;

#define NUM_DATA 10

struct MyStruct 
{
    int year;
    int month;
    int day;
    int count;
}myData[NUM_DATA] = {
    {1920, 1, 9, 38},
    { 1920, 1, 10, 6 },
    { 1920, 1, 20, 14 },
    { 1920, 2, 1, 8 },
    { 1920, 2, 2, 0 },
    { 1920, 2, 3, 3 },
    { 1920, 3, 19, 32 },
    { 1920, 3, 20, 25 },
    { 1920, 3, 22, 10 },
    { 1920, 3, 26, 25 }
};


int main()
{
    map<int, int> myMap;
    for (int i = 0; i < NUM_DATA; i++)
    {
        myMap[myData[i].month] += myData[i].count;
    }

    map<int, int>::iterator it = myMap.begin();
    for (; it != myMap.end(); it++)
    {
        cout << (*it).first << " " << (*it).second << endl;
    }

    cout << "二月份的总量:";
    it = myMap.find(2);
    if (it != myMap.end())
    {
        cout << (*it).second << endl;
    }
    else
    {
        cout << 0  << "(没有找到二月份的数据)" << endl;
    }

    return 0;
}
[/quote] 十分感谢十分感谢~~~我马上就实现一下~~谢谢您,谢谢您
勤奋石头 2017-03-02
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:
用个map很容易做到统计
OK~~容我来翻翻资料~~谢谢了
幻夢之葉 2017-03-02
  • 打赏
  • 举报
回复
用个map很容易做到统计
幻夢之葉 2017-03-02
  • 打赏
  • 举报
回复
引用 4 楼 qinfenshitou 的回复:
[quote=引用 1 楼 jianwen0529 的回复:] 用个map很容易做到统计
能不能稍微详细点的给我说一下呢?谢谢了哦~~[/quote] map<int, int> myMap; // first 指定月份,second指定和 for(所有行) { myMap[月份] += 对应那行的数量(日量); } 或者 map<istring, int> myMap; // first 指定年月(比如192002),second指定和 for(所有行) { myMap[年月字串] += 对应那行的数量(日量); } 示例代码

#include <iostream>
#include <map>
using namespace std;

#define NUM_DATA 10

struct MyStruct 
{
    int year;
    int month;
    int day;
    int count;
}myData[NUM_DATA] = {
    {1920, 1, 9, 38},
    { 1920, 1, 10, 6 },
    { 1920, 1, 20, 14 },
    { 1920, 2, 1, 8 },
    { 1920, 2, 2, 0 },
    { 1920, 2, 3, 3 },
    { 1920, 3, 19, 32 },
    { 1920, 3, 20, 25 },
    { 1920, 3, 22, 10 },
    { 1920, 3, 26, 25 }
};


int main()
{
    map<int, int> myMap;
    for (int i = 0; i < NUM_DATA; i++)
    {
        myMap[myData[i].month] += myData[i].count;
    }

    map<int, int>::iterator it = myMap.begin();
    for (; it != myMap.end(); it++)
    {
        cout << (*it).first << " " << (*it).second << endl;
    }

    cout << "二月份的总量:";
    it = myMap.find(2);
    if (it != myMap.end())
    {
        cout << (*it).second << endl;
    }
    else
    {
        cout << 0  << "(没有找到二月份的数据)" << endl;
    }

    return 0;
}
勤奋石头 2017-03-02
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:
用个map很容易做到统计
能不能稍微详细点的给我说一下呢?谢谢了哦~~
worldy 2017-03-02
  • 打赏
  • 举报
回复
方子1,使用一个比较大的数组来堆放每月的数据 方子2,使用两遍扫描,第一遍获取每月的数据个数,然后根据个数申请内存,第二遍填充数据 方子3,使用CArray等封装库

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧