2017-07-20 12 views
9

map2map1のコンパレータをコピーするために必要なコピーアサイン(スタイルはmap1 = map2;)ですか?std :: mapはコンパレータを割り当てますか?

私は、実際の実装がそれを行うことをテストしました。私はC++標準のどこにそれが指定されているかにもっと興味があります。

答えて

11

我々は[associative.reqmts]/12を見れば連想コンテナはコンテナが渡されたオブジェクトへのポインタ又は参照を格納してはならないオブジェクトの比較を通過させることによって構成されている場合、我々は場合でも、

を有しますそのオブジェクトは参照渡しされます。結合コンテナがコピーコンストラクタまたは代入演算子を介してコピーされる場合、ターゲットコンテナは、コピーされるコンテナの比較オブジェクトをコンストラクタ内のターゲットコンテナに渡されたかのようにコピーします()。

強調鉱山

だから、あなたの例では、map1map2のコンパレータのコピーを取得します。

-2

cplusplus.comからは、コピーコンストラクタの下で(3)と言うことがわかります

(3)map (const map& x);

コンテナはへ を使用しているのallocとコンプ、内部のコピーを保持しますストレージを割り当て、そのライフタイム全体にわたって要素をソートします。 コピーコンストラクタ(3)は、xのアロケータと比較オブジェクトのコピーを保持して使用するコンテナを作成します。

+3

標準の参照を求めるOPはありませんか?また、 'cplusplus.com'は何のための信頼できるリファレンスでもありません。 – Rakete1111

+1

またOPは、コピーコンストラクタではなく、コピー代入演算子について質問しています。 – NathanOliver

+0

私はoperator =について質問していました。その理由の一部は、cplusplus.comのようなサイトがその重要な詳細について何も伝えていないということでした。参照:http://www.cplusplus.com/reference/map/map/operator=/ –