【问题标题】:C++ std::map with value type std::map具有值类型 std::map 的 C++ std::map
【发布时间】:2013-11-19 03:03:41
【问题描述】:

如何正确编写以下代码?

map< int, map< double, bool > > mymap;
mymap.insert( map< int, map< double, bool > >::value_type(50, map< double, bool >::value_type(0.1, false) ) );

【问题讨论】:

  • 通常不鼓励使用double 作为map 的键;有时很难让两个双精度值完全相等。

标签: c++ templates map stl


【解决方案1】:

这个怎么样:

typedef map<double, bool> innerType;
map<int, innerType> outer;
innerType inner;
inner.insert(pair<double, bool>(1.0, false));
outer.insert(pair<int, innerType>(1, inner));

【讨论】:

    【解决方案2】:

    如果您可以使用 C++11(并且您的空格表明它不可用):

    mymap.insert({50, {{0.1,false}}});
    

    如果没有 C++11,typedef 是您的朋友,请参阅 navono 的回答。就个人而言,我会使用这个:

    mymap[50][0.1] = false;
    

    【讨论】:

    • 我认为您还需要一个右大括号},但是您知道为什么需要将大括号加倍,即{50, {{0.1,false}}} 有效而{50, {0.1,false}} 无效吗?
    • @JesseGood:因为map&lt;double, bool&gt; 没有构造函数,它接受doublebool{0.1, false} 将用于提供。但是,它确实有一个构造函数,它采用std::pair&lt;const double, bool&gt; 的初始化列表。这就是{{0.1, false}} 的作用,一个由一对组成的初始化列表。
    • 很好的答案!但遗憾的是,我还不能使程序符合 C++11 标准
    • @BenjaminLindley:感谢您的解释。
    猜你喜欢
    • 2014-09-02
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2021-09-25
    • 2011-12-18
    • 1970-01-01
    相关资源
    最近更新 更多