マルチマップの emplace に問題があります。私はこのコードを持っています:
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 が適切に設定されることです。つまり、最初の 2 つのコンストラクター引数です。これを引き起こす原因を教えてください。
編集: これは、 emplace が Position のコンストラクターを呼び出すときに発生します。ご覧のとおり、-1 が emplace で引数 c に渡されますが、コンストラクターには間違った値があります。
興味深いのは、上記のコードを次のように置き換えた場合です。
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));
}
}
ありがとう