0

マルチマップの 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));
    }
  }

ありがとう

4

0 に答える 0