使用指向地图矢量的指针(C ++)

时间:2015-04-16 15:26:11

标签: c++ visual-studio pointers dictionary vector

我有一个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个价格日期)

感谢。

3 个答案:

答案 0 :(得分:3)

这里没有指针,将*应用于除指针之外的其他东西(或者将操作符重载为类似指针的类)并不合理。

你想要

map <Date, Double> & pricePathJ = simulatedPrices_[j];

没有*,初始化引用以引用向量中的地图,如果这是您想要引用的内容。然后使用.而不是->来访问其成员。

如果由于某种原因需要指针而不是引用,请使用*声明指针并使用&来获取对象的地址:

map <Date, Double> * pricePathJ = &simulatedPrices_[j];

答案 1 :(得分:2)

关于引用要记住的事情:

  1. 它们是它们引用的对象的别名,因此它们的处理方式与处理原始对象的方式相同,因此无需使用->运算符来访问其成员,只需使用.
  2. 你不能指定一个指针(AKA指向其他对象的地址)。因为他们不仅仅是持有地址。 取消引用运算符不能应用于向量,但可以应用于指向向量的指针,如here所述。
  3. &#34; C ++中引用的定义是不需要存在的。它可以作为现有对象的新名称实现(类似于在Ada中重命名关键字)。&#34;根据{{​​3}},

  4. 出于这些原因,由于simulatedPrices_[j]会返回引用(请参阅wikipedia),因此您可以将其分配给其他引用,这就是map <Date, Double> & pricePathJ = simulatedPrices_[j];有效的原因。

答案 2 :(得分:1)

没有*即可。

map <Date, Double> & pricePathJ = simulatedPrices_[j];

您将获得地图元素的参考。

此外,您不必担心simulatedPrices_的“大”,因为它将被引用而不被复制。


当您使用*时,编译器搜索operator* map<Date, Double>并发出错误。