Реализация сводной таблицы c ++ - PullRequest
6 голосов
/ 25 декабря 2011

Аналогично этому вопросу Сводная таблица в c # , я ищу, чтобы найти реализацию сводной таблицы в c ++.Из-за требований проекта скорость довольно критична, а остальная часть проекта, критически важного для производительности, написана на c ++, поэтому реализация на c ++ или вызываемая из c ++ была бы крайне желательна.Кто-нибудь знает реализации реализаций сводной таблицы, аналогичной той, что была найдена в Excel или open office?

Я бы предпочел не кодировать такую ​​вещь с нуля, но если бы мне пришлось это сделать, как мнепойти на это?Какие алгоритмы и структуры данных было бы полезно знать?Будем весьма благодарны за любые ссылки на алгоритм.

Ответы [ 3 ]

3 голосов
/ 07 января 2012

Я уверен, что вы не запрашиваете полную функцию сводной таблицы в Excel.Я думаю, что вы хотите простую статистическую таблицу, основанную на дискретных объясняющих переменных и данных статистики.Если вы это сделаете, я думаю, что это тот случай, когда писать с нуля может быть быстрее, чем смотреть на другие реализации.

Просто обновите std :: map (или аналогичную структуру данных) ключа, представляющего комбинацию объясняющих переменных и значения заданной статистики, когда программа читает каждую точку данных.

После завершения чтения этотолько вопрос организации выходной таблицы с картой, которая может быть тривиальной в зависимости от вашей цели.

Я полагаю, что большинство примеров C # в этом вопросе, который вы связали, в любом случае используют этот подход.

0 голосов
/ 08 января 2012

Я думаю, что причина, по которой ваш вопрос не привлек к себе большого внимания, заключается в том, что неясно, какие у вас входные данные и какие параметры для сводной таблицы вы хотите поддерживать.

Сводная таблица в своей основной форме, проходит через данные, объединяет операции в сегменты.Например, вы хотите увидеть, сколько предметов вы отправляли каждую неделю с каждого склада за последние несколько недель:

Вы бы создали многомерный массив корзин (строки - недели, столбцы - склады), ипросмотрите данные, решите, к какому сегменту принадлежат эти данные, добавьте сумму в просматриваемой записи и перейдите к следующей записи.

0 голосов
/ 06 января 2012

Я не знаю о существующей реализации, которая бы удовлетворяла вашим потребностям, поэтому, если вы написали одну ...

Я бы предложил использовать SQLite для хранения ваших данных и использовать SQL для вычисления агрегатов (Примечание: SQL не будет выполнять медиану, на некоторой стадии я предлагаю абстракцию для такого поведения), Преимущество Использование SQLite заключается в том, что он довольно гибкий и чрезвычайно надежный, плюс он позволяет вам воспользоваться их тяжелой работой с точки зрения хранения и манипулирования данными. Оборачивание интерфейса, которого вы ожидаете от сводной таблицы, вокруг этой концепции - хороший способ начать и сэкономить вам много времени.

Затем вы могли бы объединить это с архитектурой модель-представление-контроллер для компонентов пользовательского интерфейса, я ожидаю, что это будет работать как шарм. Я очень довольный пользователь Qt, поэтому в этой связи я бы предложил использовать QTableView Qt в сочетании с QStandardItemModel (если мне это удастся) или QAbstractItemModel (если мне нужно). Не уверен, если вы хотели это предложение, но оно есть, если вы хотите:).

Надеюсь, что это даст вам отправную точку, любые вопросы или дополнения, не стесняйтесь спрашивать.

...