間に差があるstd::pairと、std::tuple2人のだけのメンバーとは?(std::pair2つだけのメンバーを必要としtuple、多かれ少なかれ持っているかもしれないという明白なことに加えて...)
回答:
いくつかの違いがあります:
std::tuple標準レイアウトによるものにすることはできません(少なくとも、標準によるものである必要はありません)。とがstd::pair<T, Y>両方とも標準レイアウトである場合、すべてが標準レイアウトです。TY
の内容を取得するpair方がtuple。よりも少し簡単です。ケースは単なるメンバーフィールドですがtuple、pairケースでは関数呼び出しを使用する必要があります。
しかし、それはそれについてです。
std::map用途をstd::pair<const Key,T>としてvalue_typeも、C ++ 11インチ タプルはどこで使用されていstd::mapますか?
                    std::map。
                    これは、ことが非常に遅く答えが、ノートであるstd::pairメンバ変数で定義され、そのサイズは使用して最適化することができない空の基底クラスの最適化を(firstそしてsecond一方または両方が空クラスの場合でも、個別のアドレスを占有しなければなりません)。これsecond_typeは、アライメント要件が何であれ悪化するため、最悪の場合、結果としてstd::pairは基本的に必要なサイズの2倍になります。
std::tupleヘルパー関数を介したアクセスのみを許可するため、どちらかが空の場合はどちらのタイプからも派生でき、オーバーヘッドを節約できます。GCCの実装は、少なくとも、間違いなくこれを行います...ヘッダーを調べてこれを確認できますが、証拠としてこれもあります。
[[no_unique_address]]std::pairはの欠点を取り除くはずです。
                    アンstd::tupleの名前が長い(1つの余分な文字)です。これらの文字の多くは右手で入力されるため、ほとんどの人が簡単に入力できます。
とはstd::pairいえ、値は2つだけで、0、1、3、またはそれ以上にすることはできません。2つの値。ただし、タプルには、値の数に意味上の制限はほとんどありません。アンはstd::pair、したがって、あなたが実際の値のペアを指定したい場合に使用する安全なタイプを入力し、より正確です。
std::tuple<>ありませんまた、タイプセーフ(?それはどのようになることができませんでした)、そして2何よりも意味的に異なっていますpair。
                    
.firstと.secondは便利ですが、コードの変更で3番目(またはそれ以上)のメンバーが必要な場合は役に立ちません。std::getゲッターに関係なく、すべてを変更する必要はなく、データ型とmake_pair呼び出しの呼び出しだけを変更する必要があることに気づきましたmake_tuple。