使用emplace for multimap,以及带有多个参数的构造函数

时间:2013-07-13 16:40:31

标签: c++ c++11

我遇到了针对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)
    {}
};

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

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

enter image description here

有趣的是,如果我用以下代码替换上面的代码:

std::forward_as_tuple(i,j,i,i,i)
然后这个问题就消失了。只有直接传递整数时才会出现问题 值如5或-1或其他什么。如果我传递变量就买,那就不会发生。

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

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

由于

0 个答案:

没有答案