0

我想了解 MultiMap 是否是 STL 中以“日期”、“价格”等格式存储金融市场数据的最佳容器(例如 07/10/2013 1000)。我试图做一个简单的例子,只是为了了解哪个可能是实现,但是当我试图打印出来时遇到了一个可怕的错误。

  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() 对日期进行排序。

对于类型日期,是否有更优雅的解决方案,而不是使用 Class Date ?

如果这是金融市场数据的最佳容器?

非常感谢您的帮助

4

1 回答 1

0

您必须在 C++ 中执行此操作吗?这是一种可怕的语言来做金融工作。相信我,我去过那里。

如果您尝试将自定义类添加到容器中,则需要研究容器对元素的要求。例如,容器经常需要能够创建、删除、比较、排序和赋值给它们所包含的东西,所以你需要实现比较运算符(是的,运算符 <() 是其中的一部分;只需实现一个运算符< (const YourClass& other) const,但请阅读您的容器类)、赋值运算符、复制构造函数等。

这就是为什么另一种语言会更容易的部分原因。例如,Python 会自动为您派生出大多数这些运算符,并且在过去几年中,它被 SEC 批准为金融市场数据的官方语言。Python、Java、Ruby、Perl 或几乎任何其他主流语言都会是更好的选择——尤其是如果它带有十进制类。如果您担心性能,请查看 NumPy,并使用 MySQL 或 mongodb 等数据库后端。

但是,如果您确实(相信)无论出于何种原因(可能是巨大的数据量和性能)都需要使用 C++,那么至少要礼貌地使用 boost——尤其是它的变体类型,并考虑 STXXL。但是,如果您想要性能,那么最近 Go 将是一个更明智的选择。确实,为此使用 C++ 的唯一原因是,如果您为一家强迫您这样做的疯狂公司工作……确实会发生这种情况。

于 2013-10-08T00:01:56.123 回答