c ++(不是> = 11),初始化地图中的嵌套对

Jam*_*mes 0 c++ stdmap c++03 std-pair

在我不应该用-std = c ++ 11编译的限制下,我想在以下变量中添加一个额外的变量,

std::map<unsigned,
  std::map<unsigned,
    std::pair<
      std::pair<int, int>,
      std::pair<bool, bool>
    >
  >
>
temp;
Run Code Online (Sandbox Code Playgroud)

并据此调整其初始化:

for (int i=0; i<100; ++i)
  {
    temp[i][i]=
      std::pair<
        std::pair<int, int>,
        std::pair<bool, bool>
        >
      > (
          std::pair<int, int> (intsX[i], intsY[i]),
          std::pair<bool, bool> (boolsX[i], boolsY[i])
        );
  }
Run Code Online (Sandbox Code Playgroud)

我想将结构更改为:

std::map<unsigned,
  std::map<unsigned,
    std::pair<
      std::pair<int, int>,
      std::pair<
        std::pair<bool, bool>,
        double
      >
    >
  >
>
temp;
Run Code Online (Sandbox Code Playgroud)

现在,我不知道如何更改初始化,例如......

for (int i=0; i<100; ++i)
  {
    temp[i][i]=
      std::pair<
        std::pair<int, int>,
        std::pair<
          std::pair<bool, bool>,
          double
        >
      > (
          std::pair<int, int> (intsX[i], intsY[i]),
          std::pair<std::pair, double> (
                                        std::pair<bool, bool> (boolsX[i], boolsY[i]),
                                        doublesX[i]
                                        )
        );
  }
Run Code Online (Sandbox Code Playgroud)

我可以使用如下的c ++ 11初始化列表,但是可以在不使用此c ++ 11功能的情况下执行此操作(?):

for (int i=0; i<100; ++i)
  {
    temp[i][i]=
      std::pair<
        std::pair<int, int>,
        std::pair<
          std::pair<bool, bool>,
          double
        >
      > (
          std::pair<int, int> (intsX[i], intsY[i]),
          std::pair<std::pair<bool, bool>, double> ({boolsX[i], boolsY[i]}, doublesX[i])
        );
  }
Run Code Online (Sandbox Code Playgroud)

asc*_*ler 5

使用std::make_pair使代码更易读.

temp[i][i] = std::make_pair(
    std::make_pair(intsX[i], intsY[i]),
    std::make_pair(
        std::make_pair(boolsX[i], boolsY[i]),
        doublesX[i])));
Run Code Online (Sandbox Code Playgroud)