0

std::mapコンテナとして使用されるクラスがあります。2 つのオブジェクト間でマップをコピーする機能を追加したいと考えています。マップはクラスのプライベート メンバーとして宣言されているため、そのためにはフレンド関数が必要です。これが私のコードです:

class Data;
void copyData(Data &, Data &);

class Data
{
  private:
    map<int, int> _data;

  public:
    friend void copyData(Data &, Data&);
};

void copyData(Data &a, Data &b)
{
  std::copy(a._data.begin(), a._data.end(), b._data.begin());
}

main()
{
   // initialization here
   Data A, B;
   copyData(A, B);
}

しかし、mingw32 でコンパイル中に多くの警告が表示されます。これを正しく行うにはどうすればよいですか?

4

1 に答える 1

2

std::map<K,V>::value_typeとして定義されstd::pair<const K,V>ます。これにより、std::map<K,V>::iteratorオブジェクトを使用してキーに割り当てることができなくなります(または、これを使用してコンテナの不変条件を解除できます)。

これは、マップイテレータがOutputIterator概念要件を満たしていないため、関数の3番目のパラメータとして使用できないことを意味しstd::copy()ます。同じように、一方のマップにもう一方のマップよりも多くの関連付けがある場合など、このコードがとにかく壊れてしまう状況はたくさんあります。

さらに、関数を作成するためのはるかに簡単な方法があります。

void copyData(Data &a, Data &b)
{
  b._data = a._data;
}
于 2012-04-07T05:51:46.943 に答える