【问题标题】:Iterating over a map of ints and objects迭代整数和对象的映射
【发布时间】:2014-06-23 23:13:13
【问题描述】:

我有一个名为 SAR 的类,其中包含一个映射,其中包含我的 SARdataPoint 类型的 int 键值和对象数据值。 SARdataPoint 类型有一个函数 int getDate() 我想为地图中包含的每个对象调用它。我无法解决如何完成此任务。我想我很接近了。

class SAR
{
public:
    // other attributes removed for compactness
    std::map<int, SARdataPoint> data;
}; // end of class SAR

void SAR::printSAR()
{
    for(auto iter = this->data.cbegin(); iter != this->data.cend(); ++iter)
    {
        std::cout << iter->getDate() << '\n'; //incorrect but close?
    }
}

关于如何实现这一点的任何想法?

【问题讨论】:

  • 下次请包括您收到的确切错误消息。
  • 如果没有错误消息和尝试自己编译它的最小示例,我唯一能看到的是您尝试访问取消引用的iter 的 getDate 成员。但是iter 取消引用到键值对。 IE。你必须做(*iter).second.getDate()(第一个而不是第二个是int键)。这有帮助吗?
  • 下次我一定会包含错误消息以及可编译的代码。谢谢。
  • 另外,感谢您引导我学习含义 (*iter).whatever 和 iter->whatever

标签: c++ map iterator


【解决方案1】:

你有一个 std::map,它是 std::pairs 的集合。每个 std::pair 都有一个键(pair::first)和一个值(pair::second)。我相信您的迭代循环是正确的。但是在 std::pair 上调用 ::getDate() 是错误的。您需要做的是:

std::cout << iter->second.getDate() << std::endl;

遍历整个地图的另一个选项是使用基于范围的for

for(auto const& d : data) {
    std::cout << d.second.getDate() << std::endl;
}

【讨论】:

  • 我使用 iter->second.getDate() 得到这个错误...调查一下。 SAR.cc:102:39:错误:将“const SARdataPoint”作为“int SARdataPoint::getDate()”的“this”参数传递会丢弃限定符 [-fpermissive]
  • @user3689202 这是一个不同的问题,关于 const 正确性。如果您无法弄清楚,请发布一个新问题。
猜你喜欢
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 2017-12-22
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多