2

我刚刚进入新的 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;
4

2 回答 2

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";
    }
}

输出:

一对:
  (9, 10)

简单地图:
  (5, 6)
  (7, 8)

复杂地图:
  (1, (3, 4)(5, 6))
  (2, (7, 8)(8, 8)(9, 0))

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

于 2013-05-22T20:40:59.483 回答
0

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

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

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

于 2013-05-22T20:40:22.110 回答