我想了解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;
}
比较&lt; operator()我的问题在这里?我如何实现&lt; operator()对日期进行排序。
对于类型日期而不是使用类日期,是否有更优雅的解决方案?
如果这是金融市场数据的最佳容器?
非常感谢您的帮助
答案 0 :(得分:0)
您是否必须在C ++中执行此操作?这是一种令人难以置信的语言来做财务。信任我,我去过那里。
如果您尝试将自定义类添加到容器中,则需要研究容器对元素的要求。例如,容器通常需要能够为它们包含的内容创建,删除,比较,排序和赋值,因此您需要实现比较运算符(是的,运算符&lt;()是其中的一部分;只需实现一个operator&lt;(const YourClass&amp; other)const,但读取容器类),赋值运算符,复制构造函数等。
这是为什么另一种语言会更容易的一部分。例如,Python会自动为您提供大部分运营商,并且在过去几年中它被美国证券交易委员会批准为金融市场数据的官方语言。 Python,Java,Ruby,Perl或任何其他主流语言都是更好的选择 - 特别是如果它带有十进制类。如果您担心性能,请查看NumPy,并使用MySQL或mongodb等数据库后端。
但是如果你(相信)你需要使用C ++,无论出于何种原因(可能是巨大的数据量和性能),至少要自己使用boost - 特别是它的变体类型,并考虑使用STXXL。但是,如果你想要表现,那么最近将是一个更明智的选择。真的,为此使用C ++的唯一原因是,如果你为一家疯狂的公司工作,迫使你......这确实发生了。