C ++ 0x 3d карта инициализируется как в ассоциативных массивах php

я просто вхожу в новые вещи с ++ 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

Решение

Да, с помощью функции унифицированной инициализации 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)

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

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

Посмотреть онлайн демо на http://ideone.com/hCjtjP .

2

Другие решения

Вы можете использовать равномерную инициализацию, но она работает только при инициализации, а не где-либо еще.

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

обратите внимание на дополнительные {} вокруг {2, 3}. чтобы инициализировать карту, вам нужен initialization_list пар. Затем пары строятся с использованием равномерной инициализации.

0

По вопросам рекламы [email protected]