2011-12-25 4 views
5

Simile a questa domanda Pivot Table in c#, Sto cercando di trovare un'implementazione di una tabella pivot in C++. A causa dei requisiti del progetto, la velocità è piuttosto critica e il resto del progetto delle parti critiche per le prestazioni è scritto in C++, quindi una implementazione in C++ o callable da C++ sarebbe altamente auspicabile. Qualcuno sa delle implementazioni di una tabella pivot simile a quella trovata in Excel o in ufficio aperto?C++ implementazione tabella pivot

Preferirei non dover codificare una cosa del genere da zero, ma se dovessi farlo, come dovrei farlo? Di quali algoritmi e strutture dati sarebbe opportuno essere a conoscenza? Qualsiasi link ad un algoritmo sarebbe molto apprezzato.

+0

Visto che questo è il primo badge tumbleweed che ho guadagnato sembra una taglia in ordine ... – shuttle87

+1

OpenOffice è open source e scritto in parte in C++ - perché non dare un'occhiata alla loro implementazione? – HighCommander4

risposta

0

Io non sono a conoscenza di un'implementazione esistente che potrebbe soddisfare le vostre esigenze, così, supponendo che si dovesse scrivere una ...

Io suggerirei usando SQLite per memorizzare i vostri dati e di utilizzare SQL per calcolare gli aggregati (Nota: SQL non farà la mediana, suggerisco un'astrazione a un certo punto per consentire tale comportamento), Il vantaggio di usare SQLite è che è piuttosto flessibile ed estremamente robusto, in più ti consente di trarre vantaggio dal loro duro lavoro in termini di memorizzazione e manipolazione dei dati. Avvolgere l'interfaccia che ti aspetti dalla tua tabella pivot attorno a questo concetto sembra un buon modo per iniziare e farti risparmiare un sacco di tempo.

Si potrebbe quindi combinare questo con un'architettura modello-vista-controller per componenti dell'interfaccia utente, prevedo che funzionerebbe come un fascino. Sono un utente molto soddisfatto di Qt, quindi a questo proposito suggerirei di usare Qt's QTableView in combinazione con QStandardItemModel (se posso farla franca) o QAbstractItemModel (se devo). Non sono sicuro se volessi questo suggerimento, ma è lì se lo vuoi :).

La speranza che ti dà un punto di partenza, qualsiasi domanda o aggiunta, non esitate a chiedere.

3

Sono sicuro che non si sta richiedendo la funzionalità completa della tabella pivot in Excel. Penso che tu voglia una tabella di statistiche semplice basata su variabili esplicative discrete e statistiche fornite. Se lo fai, penso che questo sia il caso che scrivere da zero potrebbe essere più veloce di guardare ad altre implementazioni.

Basta aggiornare std :: map (o una struttura di dati simile) della chiave che rappresenta la combinazione di variabili esplicative e il valore di determinate statistiche quando il programma legge ciascun punto di dati.

Dopo aver finito con la lettura, è solo questione di organizzare la tabella di output con la mappa che potrebbe essere banale a seconda del tuo obiettivo.

Credo che la maggior parte degli esempi di C# in quella domanda che hai collegato facciano comunque questo approccio.

0

Penso che il motivo per cui la tua domanda non ha ottenuto molta attenzione è che non è chiaro quali siano i tuoi dati di input, né quali opzioni per la tabella pivot vuoi supportare.

Una tabella pivot si trova nella sua forma base, scorrendo i dati, aggregando le operazioni in bucket. Ad esempio, desideri vedere quanti oggetti hai spedito ogni settimana da ciascun magazzino per le ultime settimane:

Si creerebbe una matrice multidimensionale di bucket (le righe sono settimane, le colonne sono magazzini) e passeranno attraverso i dati, decidendo a quale bucket appartengono i dati, aggiungendo l'importo nel record che si sta guardando e passando al record successivo.