我在使用 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));
}
}
谢谢