【问题标题】:c++ (not >=11), initializing nested pairs in a mapc ++(不> = 11),初始化地图中的嵌套对
【发布时间】:2016-08-11 14:33:04
【问题描述】:

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

std::map<unsigned,
  std::map<unsigned,
    std::pair<
      std::pair<int, int>,
      std::pair<bool, bool>
    >
  >
>
temp;

并相应调整其初始化:

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])
        );
  }

我想把结构改成这样:

std::map<unsigned,
  std::map<unsigned,
    std::pair<
      std::pair<int, int>,
      std::pair<
        std::pair<bool, bool>,
        double
      >
    >
  >
>
temp;

现在,我不确定如何更改初始化,例如...

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]
                                        )
        );
  }

我可以按如下方式使用 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])
        );
  }

【问题讨论】:

  • 在你的设计中不要使用分层对和模拟类的映射,而是使用类——它们在没有 C++11 的情况下可用......
  • @BartoszKP 我应该清楚地说明上下文,道歉。这是在一个程序中,我无法更改布局,但会添加额外的双精度。
  • @James 也许用正常的方式重写所有代码更简单?像pairVar.first.second.second.first 这样的代码会让任何人感到困惑。
  • @BartoszKP 确实后面的代码很混乱!!!

标签: c++ stdmap c++03 std-pair


【解决方案1】:

使用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])));

【讨论】:

  • 太好了,这很好,谢谢。出于好奇,是否可以不使用 make_pair 来做到这一点?所以我可以理解代码将如何变化。
  • @James 只需将std::make_pair 的所有实例更改为std::pair&lt;type1, type2&gt;
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 2017-05-18
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多