2013-10-07 2 views
0

Я хотел бы понять, является ли MultiMap лучшим контейнером в STL для хранения данных финансового рынка в формате «дата», «цена» (например, 07/10/2013 1000). Я попытался сделать простой пример, просто чтобы понять, какой может быть реализация, но у меня были ужасные ошибки, когда я пытался распечатать их.Использование MultiMap для хранения данных финансового рынка в C++

class Date { 
    int day; 
    int month; 
    int year; 
    int value_of_date; 

    public: 
    Date(int d, int m, int y): 
     day(d),month(m),year(y){ 
     value_of_date=year*10000 + month*100 + day; 
     } 

    friend ostream & operator<< (ostream &out, const Date &date); 
    }; 
     ostream & operator<< (ostream &out, const Date &date) { 
     out << "(" << date.day << ", " << 
     date.month << ", " << 
     date.year << ")"; 
     return out; 
    } 

    int main() { 

    std::multimap<Date,int> first; 

    first.insert(std::pair<Date,int>(Date(01,01,2000),1000)); 
    first.insert(std::pair<Date,int>(Date(01,02,2000),1010)); 
    first.insert(std::pair<Date,int>(Date(01,03,2000),1020)); 
    first.insert(std::pair<Date,int>(Date(01,04,2000),1030)); 

    for(auto i = first.cbegin(); i != first.cend(); i++) { 
     std::cout << i->first << " " << i->second << std::endl; 
    } 
    return 0; 
    } 

Сравнение < Оператор() моя проблема здесь? Как я могу реализовать оператор <() для сортировки даты.

Есть ли более элегантное решение для даты типа вместо использования даты класса?

Если это лучший КОНТЕЙНЕР для данных финансового рынка?

Большое спасибо за любую помощь

ответ

0

вы должны сделать это в C++? Это УЖАСНЫЙ язык, чтобы делать финансовые вещи. Поверьте мне, я был там.

Если вы пытаетесь добавить пользовательский класс в контейнер, вам необходимо изучить требования к контейнеру для элементов. Например, контейнеры часто должны иметь возможность создавать, удалять, сравнивать, сортировать и присваивать значения тем вещам, которые они содержат, поэтому вам нужно реализовать операторы сравнения (да, оператор <() является его частью, просто выполните оператор < (const YourClass & другой) const, но читайте в своем классе контейнера), операторы присваивания, конструкторы копирования и т. Д.

Это часть того, почему проще было бы упростить другой язык. Например, Python автоматически выведет большинство этих операторов для вас, и он был одобрен SEC в последние пару лет в качестве официального языка для данных финансового рынка. Python, Java, Ruby, Perl или практически любой другой основной язык будет лучшим выбором, особенно если он имеет десятичный класс. Если вы беспокоитесь о производительности, загляните в NumPy и используйте бэкэнд базы данных, такой как MySQL или mongodb.

Но если вы (верите), вам нужно использовать C++ по любой причине (возможно, огромные объемы данных и производительность), по крайней мере, сделайте себе любезность использования boost - особенно его вариантного типа и учитывая STXXL. Однако, если вы хотите производительности, идти будет более разумным выбором в последнее время. На самом деле, единственная причина использовать C++ для этого - если вы работаете на сумасшедшую компанию, которая заставляет вас ... что происходит.

+0

Спасибо Ли за ваше предложение, я буду смотреть в библиотеке Boost и рассматривать STXXL. Мне нужно это в C++. – MaxMarcucci

Смежные вопросы