0

我在使用 emplace for multimap 时遇到问题。我有这个代码:

std::multimap<int,Position> countries;
countries.emplace(std::piecewise_construct,
        std::forward_as_tuple(someValue),
        std::forward_as_tuple(i,j,-1,-1,-1));

struct Position {
    int a,b,c,d,e;
    Position():a(-1),b(-1),c(-1),d(-1),e(-1){}
    Position(int a,int b,int c,int d,int e):a(a),b(b),c(c),d(d),e(e)
    {}
};

如您所见,Position 有带有 5 个参数的构造函数。发生的非常奇怪的事情是,一旦我放置了所有元素,无论出于何种原因,我在元组中传递的 -1 参数值都没有设置,并且 i 和 j 设置正确,即前两个构造函数参数。您能否建议可能导致这种情况的原因?

编辑:当 emplace 调用 Position 的构造函数时会发生这种情况。如您所见,即使在参数 c 的位置传递了 -1,它在构造函数中的值也是错误的。

在此处输入图像描述

有趣的是,如果我将上面的代码替换为:

std::forward_as_tuple(i,j,i,i,i)

然后这个问题就消失了。只有当我直接传递一个整数值(如 5 或 -1 或其他)时,才会出现问题。如果我通过变量购买,那么它就不会发生。

这是有效的代码。我没有传递 -1,而是传递了一个名为 undefined 的变量。无论出于何种原因,它都有效。

  int undefined = -1;
  std::multimap<int,Position> countries;
  for (int i = 0; i < solution->getNumberOfRawSheets(); i++) {
    for (int j = 0; j < solution->rawSheets[i].getNumberOfCountries(); j++) {
      countries.emplace(std::piecewise_construct,
        std::forward_as_tuple(solution->rawSheets[i].countries[j].getUsedHeight()),
        std::forward_as_tuple(i,j,undefined,undefined,undefined));
    }
  }

谢谢

4

0 回答 0