【问题标题】:Pulling values from nested maps从嵌套映射中提取值
【发布时间】:2012-04-27 16:18:25
【问题描述】:

环顾四周,找不到我需要的东西。我正在寻找一种方法来从外部映射中提取键并从内部映射中提取值,以便在输出语句中使用。如果我有一张地图,我知道我可以使用insideMap[key] 从内部地图中提取我需要的数据。但是,[] operator 在此实现 ((*itr).second)[keyword] 中似乎不起作用。

map< string, map<string, int> >::const_iterator itr; 
for( itr=books.begin(); itr!=books.end(); ++itr)
  //code I need here

【问题讨论】:

  • operator[] 通过插入一个新值(如果它尚不存在)来修改映射。所以你不能用const_iterator.

标签: c++ map iterator nested


【解决方案1】:

您可以使用 std::map::at() 代替 operator[]。 at() 返回键的值,如 operator[],但 at() 有一个 const 版本。

(itr->second).at(keyword)

at() 和 operator[] 的区别在于 at() 会进行额外的范围检查,如果失败则抛出 out_of_range 异常。

【讨论】:

    【解决方案2】:

    [] 的问题在于您的迭代器的const-ness:[] 运算符不是const,因此您需要改用find(keyword),并取消引用它返回的迭代器:

    *(((*itr).second).find(keyword))
    

    您也可以切换到非常量迭代器并使用[]

    【讨论】:

    • 谢谢。我想我不想使用非const 迭代器,因为我不想弄乱我的地图。然后我意识到我没有将我的地图用于其他任何事情,默认构造的帮助大于伤害。
    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    相关资源
    最近更新 更多