我遇到了针对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中传递,它在构造函数中的值也是错误的。
有趣的是,如果我用以下代码替换上面的代码:
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));
}
}
由于