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

Using pointer to vector of map (C++)

本文关键字:指针 C++ 地图      更新时间:2023-10-16

我有一个类型为 vector< map < Date, Double >> 的对象(名为 simulatedPrices_ 的对象)。我想做一个for循环,读取vector内部的map。我尝试在下面使用:

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 个日期的价格)

谢谢。

这里没有指针,将*应用于指针(或重载运算符以充当指针的类)以外的其他内容是没有意义的。

你想要

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

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

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

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

关于引用要记住的事情:

  1. 它们是它们引用的对象的别名,因此可以像对待原始对象一样对待它们,因此无需使用 -> 运算符来访问其成员,您只需使用 . .
  2. 您不能将指针(也称为其他对象的地址)分配给它们。因为他们不仅持有地址。取消引用运算符不能应用于向量,但可以应用于指向向量的指针,如此处所述。
  3. "C++中对参考的定义是,它不需要存在。它可以实现为现有对象的新名称(类似于 Ada 中的重命名关键字)。 根据维基百科,

由于这些原因,并且由于simulatedPrices_[j]返回一个引用(参见 std::vector::operator[]),那么您可以将其分配给另一个引用,这就是map <Date, Double> & pricePathJ = simulatedPrices_[j];工作的原因。

没有*没关系。

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

您将获得地图元素的引用。

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


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