我有一个vector< map < Date, Double >>
类型的对象(名为simulatedPrices_
的对象)。我想要for
循环读取map
内的vector
。我试着在下面使用:
for (j=0; j<10000; j++) {
map <Date, Double> & pricePathJ = *simulatedPrices_[j];
price = pricePathJ->find(targetDate)->second; //targetDate is certain date
cout << j << " : " << price << endl;
}
但似乎错误地说没有运算符"*"
匹配这些操作数。
有什么想法抱怨这个错误吗?
无论如何,我可以做得更好,而不是上述。
我使用指针的原因是simulatedPrices_
是一个相当大的对象(包含10000个地图的矢量,每个地图都有900个价格日期)
感谢。
答案 0 :(得分:3)
这里没有指针,将*
应用于除指针之外的其他东西(或者将操作符重载为类似指针的类)并不合理。
你想要
map <Date, Double> & pricePathJ = simulatedPrices_[j];
没有*
,初始化引用以引用向量中的地图,如果这是您想要引用的内容。然后使用.
而不是->
来访问其成员。
如果由于某种原因需要指针而不是引用,请使用*
声明指针并使用&
来获取对象的地址:
map <Date, Double> * pricePathJ = &simulatedPrices_[j];
答案 1 :(得分:2)
关于引用要记住的事情:
->
运算符来访问其成员,只需使用.
。出于这些原因,由于simulatedPrices_[j]
会返回引用(请参阅wikipedia),因此您可以将其分配给其他引用,这就是map <Date, Double> & pricePathJ = simulatedPrices_[j];
有效的原因。
答案 2 :(得分:1)
没有*
即可。
map <Date, Double> & pricePathJ = simulatedPrices_[j];
您将获得地图元素的参考。
此外,您不必担心simulatedPrices_
的“大”,因为它将被引用而不被复制。
当您使用*
时,编译器搜索operator*
map<Date, Double>
并发出错误。