я просто вхожу в новые вещи с ++ 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;
Да, с помощью функции унифицированной инициализации 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 .
Вы можете использовать равномерную инициализацию, но она работает только при инициализации, а не где-либо еще.
std::map<int, std::map<int, int>> foo = {
{1, {{2, 3}}}
};
обратите внимание на дополнительные {} вокруг {2, 3}. чтобы инициализировать карту, вам нужен initialization_list пар. Затем пары строятся с использованием равномерной инициализации.