2011-12-25 168 views
5

與此問題類似Pivot Table in c#,我正在尋找在C++中的數據透視表的實現。由於項目要求速度相當關鍵,其餘的性能關鍵部分項目都是用C++編寫的,所以在C++中的實現或從C++調用的實現將是非常理想的。有誰知道數據透視表的實現類似於Excel或Open Office中的數據透視表嗎?C++數據透視表的實現

我寧願不必從頭編碼這樣的事情,但如果我要這樣做,我應該怎麼做呢?什麼算法和數據結構會很好地被意識到?任何指向算法的鏈接都將不勝感激。

+0

看到這是我贏得的第一個滾石徽章看起來像一個賞金是爲了...... – shuttle87 2012-01-01 16:56:46

+1

OpenOffice是開源的,部分用C++編寫 - 你爲什麼不看看它們的實現? – HighCommander4 2012-01-02 06:48:59

回答

0

我不知道會適合您的需求,現有的實現,因此,假設你寫一個...

我建議使用SQLite存儲數據,並使用SQL來計算聚集(注意:SQL不會做中位數,我建議在某個階段抽象以允許這樣的行爲),使用SQLite的好處是它非常靈活和非常強大,再加上它可以讓你利用他們的努力工作存儲和操作數據。圍繞這個概念將您期望從數據透視表中獲得的界面包裝起來似乎是一個很好的開始方式,併爲您節省了大量的時間。

然後,您可以將它與用於UI組件的模型 - 視圖 - 控制器體系結合在一起,我預計它可以像魅力一樣工作。我是Qt的一個非常滿意的用戶,所以在這方面,我建議使用Qt的QTableView和QStandardItemModel(如果我可以避開它)或QAbstractItemModel(如果必須的話)。不知道你是否想要這個建議,但如果你想要的話,它就在那裏:)。

希望給你一個出發點,任何問題或補充,不要猶豫,問。

3

我相信你沒有要求Excel中的數據透視表的全部功能。我想你想要基於離散解釋變量和給定統計的簡單統計表。如果你這樣做,我認爲這是從頭開始編寫可能比查看其他實現更快的情況。

當程序讀取每個數據點時,只需更新表示解釋變量和給定統計值的組合的鍵的std :: map(或類似數據結構)。

完成閱讀後,只需根據您的目標將輸出表與地圖組織起來,這可能是微不足道的。

我相信在這個問題中,大多數C#示例都鏈接了這個方法。

0

我認爲你的問題沒有得到多少關注的原因是,它不清楚你的輸入數據是什麼,也不知道你想支持的數據透視表的選項。

數據透視表是基本形式,通過數據運行,將操作聚合到數據塊中。例如,您想查看過去幾周每個倉庫每週發貨的物品數量:

您將創建一個多維數組的桶(行是星期,列是倉庫),並貫穿數據,確定數據屬於哪個存儲桶,在您正在查看的記錄中添加數量,然後移至下一條記錄。