34

2つのフィールドと1つのペアを持つ構造体を使用する場合のメモリ割り当てと効率の違いは何ですか?

4

6 に答える 6

26

std::pair事前に作成されたコンストラクターと比較演算子を提供します。これにより、たとえば、コピーコンストラクターやoperator <(によって要求されるなどのstd::map)を介した厳密な弱順序を記述する必要なしに、std::mapなどのコンテナーに格納することもできます。それらを書かなければ、間違いを犯すことはできません(弱い順序がどれほど厳密に機能するか覚えていますか?)ので、を使用するだけの方が信頼性が高くなりますstd::pair

于 2010-02-10T11:01:03.173 に答える
21

std::pair多数のコンストラクターと演算子が付属しています。

名前付きフィールド(およびstruct以外)を許可し、いつでも拡張できるようにします。firstsecond

struct可能な場合はを優先します。多少のオーバーヘッドが伴う場合がありますが、メンテナンスは間違いなく簡単です。

于 2010-02-11T14:40:24.647 に答える
7

メモリの割り当てと効率の点では、違いはありません。それがまさにaであるためstd::pairです。

于 2010-02-10T11:06:02.637 に答える
2

これは上で言及されていないので、自分の名前の利点が必要であるが、std :: pair(または他のオブジェクト)の利点が必要な場合は、「using」(c ++ 11以降)を使用できます。これは、名前空間またはクラス宣言で設定できます。

実際、これは私のクラスの何人が今始めているかです...

using myPair = pair<int,string>;

cf. C++リファレンス。その他のドキュメントについては。

于 2018-05-01T08:56:57.530 に答える
1

メモリの割り当てや効率の点で違いはありません。実際、私が使用しているSTL実装では、ペアは次のように定義されています。struct pair

于 2010-02-10T11:06:27.887 に答える
1

std :: pair <int、int>と2つのintを使用した構造体で述べたように、初期化が行われないため、構造体はおそらく少し速くなります。

于 2017-07-30T11:35:21.543 に答える