与此问题Pivot Table in c#类似,我希望在c ++中找到数据透视表的实现。由于项目要求速度相当关键,性能关键部分项目的其余部分是用c ++编写的,因此用c ++实现或用c ++调用是非常需要的。有没有人知道类似于在Excel或开放式办公室中找到的数据透视表的实现?
我宁愿不必从头开始编写这样的东西,但如果我这样做,我该怎么办?需要注意哪些算法和数据结构?任何指向算法的链接都将非常感激。
答案 0 :(得分:3)
我相信你并没有在Excel中询问数据透视表的全部功能。我想你想要基于离散解释变量和给定统计数据的简单统计表。如果你这样做,我认为这是从头开始编写可能比查看其他实现更快的情况。
当程序读取每个数据点时,只需更新表示解释变量组合和给定统计值的键的std :: map(或类似数据结构)。
完成阅读后,只需要根据你的目标组织输出表格,这可能很简单。
我相信你链接的那个问题中的大多数C#例子都是这样做的。
答案 1 :(得分:0)
我不知道现有的实现是否符合您的需求,所以,假设您要写一个......
我建议使用SQLite来存储您的数据并使用SQL来计算聚合(注意:SQL不会做中位数,我建议在某个阶段使用抽象来允许这样的行为),使用的好处SQLite非常灵活且非常强大,而且它可以让您利用他们在存储和操作数据方面的辛勤工作。围绕此概念包装您期望从数据透视表中获得的界面似乎是一种很好的开始方式,并为您节省了大量时间。
然后,您可以将其与用于UI组件的模型 - 视图 - 控制器架构相结合,我预计它将像魅力一样工作。我是Qt的一个非常满意的用户,所以在这方面我建议将Qt的QTableView与QStandardItemModel(如果我可以逃脱它)或QAbstractItemModel(如果必须的话)结合使用。不确定你是否想要这个建议,但如果你想要它,它就在那里:)。
希望能给你一个起点,任何问题或补充,请不要犹豫。
答案 2 :(得分:0)
我认为您的问题没有引起太多关注的原因是,您不清楚您的输入数据是什么,也不清楚您想要支持的数据透视表的选项。
数据透视表是基本形式,运行数据,将操作聚合到存储桶中。例如,您想要查看过去几周每个仓库每周发送的物品数量:
您将创建一个多维数据桶阵列(行数周,列是仓库),并运行数据,确定数据所属的存储桶,在您正在查看的记录中添加数量,以及转到下一个记录。