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 に答える