C ++ 0x 3d map初始化就像在php关联数组中一样

时间:2013-05-22 20:34:34

标签: c++ c++11 stdmap uniform-initialization

我刚刚进入新的c ++ 0x内容并实例化这样的地图:

std::map<int, std::map<int, int>> foo;
foo[1][2] = 3;

很容易实现。但是我可以在php中做点什么吗?

$array = array(
    1 => array(
        2 => array(
            3
        )
    )
);

我不熟悉语法。也许是这样的

foo[][][] = {
    1 {
        2 {3}
    }
};

所以我不必一直写索引:

foo[1][2] = 3;
foo[1][3] = 4;
foo[1][4] = 5;

2 个答案:

答案 0 :(得分:2)

是的,使用c ++ 11功能统一初始化:

#include <iostream>
#include <map>

int main()
{
    // The value_type of a map is pair<const Key, T>.
    // To initialize a map an initializer list
    // of pair<Key, T> objects must be specified.

    // To initialize a pair:
    //
    std::pair<int, int> p{9, 10};
    std::cout << "pair:\n  (" << p.first << ", " << p.second << ")\n\n";

    // To initialize a simple map (no nesting)
    // with value_type of pair<int, int>:
    //
    std::map<int, int> simple_map
    {  // K  V
        { 5, 6 },
        { 7, 8 }
    };
    std::cout << "simple_map:\n";
    for (auto const& i: simple_map)
    {
        std::cout << "  (" << i.first << ", " << i.second << ")\n";
    }
    std::cout << "\n";

    // To initialize a complex map (with nesting)
    // with value_type of pair<const int, map<int, int>>
    //
    const std::map<int, std::map<int, int>> complex_map
    {  // K       V
       //       k  v
        { 1, { {3, 4},
               {5, 6} }
        },
        { 2, { {7, 8},
               {8, 8},
               {9, 0} }
        }
    };

    std::cout << "complex_map:\n";
    for (auto const& mi: complex_map)
    {
        std::cout << "  (" << mi.first << ", ";
        for (auto const& p: mi.second)
        {
            std::cout << '(' << p.first << ", " << p.second << ')';
        }
        std::cout << ")\n";
    }
}

输出:

pair:
  (9, 10)

simple_map:
  (5, 6)
  (7, 8)

complex_map:
  (1, (3, 4)(5, 6))
  (2, (7, 8)(8, 8)(9, 0))

请参阅http://ideone.com/hCjtjP的在线演示。

答案 1 :(得分:0)

您可以使用统一初始化,但它仅适用于初始化,而不适用于其他地方。

std::map<int, std::map<int, int>> foo = {
    {1, {{2, 3}}}
};

注意{2,3}周围的额外{}。要初始化地图,您需要一对initialization_list对。然后使用统一初始化来构造对。