2013-10-07 36 views
0

我想了解,如果MultiMap是STL中用於存儲金融市場數據的最佳容器,例如「date」,「price」(例如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; 
    } 

是比較< operator()我的問題在這裏?我如何實現< operator()來排序日期。

是否有類型日期而不是使用類日期更優雅的解決方案?

如果這是金融市場數據的最佳容器?

非常感謝您的幫助

回答

0

您是否需要在C++中執行此操作?這是一個可怕的語言做金融的東西英寸相信我,我一直在那裏。

如果您要將自定義類添加到容器,則需要研究容器對元素的要求。例如,容器通常需要能夠創建,刪除,比較,排序和賦值給它們包含的東西,因此您需要實現比較運算符(是的,運算符<()是其中的一部分;只需實現一個運算符<(const YourClass &其他)const,但是在你的容器類中進行了讀取),賦值操作符,拷貝構造函數等。

這是另一種語言爲什麼會更容易的一部分。例如,Python會自動爲您推導出大多數這些運營商,並且它在過去幾年被美國證券交易委員會批准爲金融市場數據的官方語言。 Python,Java,Ruby,Perl或任何其他主流語言都是更好的選擇 - 尤其是如果它帶有小數類。如果您擔心性能,請查看NumPy,並使用MySQL或mongodb等數據庫後端。但是,如果你確實需要使用C++(可能是巨大的數據量和性能),那麼至少應該使用boost來增強特性,尤其是它的變體類型,並考慮到STXXL。如果你想要表現的話,最近去會是一個更明智的選擇。真的,爲此使用C++的唯一理由是,如果你爲一個瘋狂的公司工作,這會迫使你......發生這種事情。

+0

謝謝李先生的建議,我會在Boost Library中尋找並考慮STXXL。我需要它在C++中。 – MaxMarcucci