問題タブ [std-pair]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - STLマップ挿入効率:[]対挿入
マップの挿入には2つの方法があります。
または
私の質問は、どちらの操作が速いかということです。STL標準では、最初に「キー」がマップに存在しない場合はデフォルト要素を「挿入」し、次に「val」をデフォルト要素に割り当てるため、通常、最初の要素は遅いと言われます。
しかし、「make_pair」があるため、2番目の方法の方が優れているとは思いません。make_pairは、実際には、と比較して「ペア」を作成するための便利な方法pair<T1, T2>(key, val)
です。とにかく、どちらも2つの割り当てを行います。1つは「key」を「pair.first」に割り当て、2つは「val」を「pair.second」に割り当てます。ペアが作成された後、mapは「pair.second」で初期化された要素を挿入します。
したがって、最初の方法は1です。' default construct of typeof(val)
'2.割り当て2番目の方法は1です。割り当て2.' copy construct of typeof(val)
'
c++ - ペアの比較を指定するには?
がありますpair
私はvector
のmyPair
オブジェクトを持っています。つまり、整数make_heap
の2番目の値を使用して、最小ヒープに変換する必要があります。pair
どうやってやるの?比較操作の定義方法がわかりません。
c++ - ペア範囲アクセスが C++11 から削除されたのはなぜですか?
ある時点で、C++11 ドラフトにはstd::begin
/std::end
のオーバーロードがstd::pair
あり、イテレータのペアを範囲ベースの for ループ (N3126、セクション 20.3.5.5) での使用に適した範囲として扱うことができることを発見しましたが、これには削除されたので。
削除された理由を知っている人はいますか?
イテレータのペアを範囲として扱う方法は他にないように思われるため、この削除は非常に残念です。それはそう:
- 範囲ベースの for ループでの begin/end の検索規則では、begin/end が 1) 範囲オブジェクトのメンバー関数として、2) 「関連付けられた名前空間」のフリー関数として検索されると述べています。
std::pair
begin/end メンバー関数がありません- 一般に関連付けられている唯一の名前空間
std::pair<T, U>
は名前空間 std です - オーバーロードすることは許可されていません
std::begin
/自分自身std::end
のためにstd::pair
std::begin
/std::end
for を特化することはできませんstd::pair
(特殊化は部分的である必要があり、関数では許可されていないため)
私が見逃している他の方法はありますか?
c++ - C++: ベクトル,int> >
これが私が目指していることです...
ここで、x はベクトル var_name のサイズであり、y はペア内のベクトルのサイズです。
ペア テンプレートは定数のみを許可するため、上記のステートメントは機能しません。両方のベクトルをそれぞれ x と y のサイズにするにはどうすればよいですか?
c++ - ベクトル< ペア>ありえない?
そこで、struct ポインタと int のペアを要素とするベクトルを作成しようとしましたが、これは不可能かもしれないと考え始めています..
次の構造体があるとします。
およびベクトル:
次に、新しいノードを作成してベクターに入れようとしましたが、明らかに機能していません。
コンパイラは私にこう言って吠えます:nod1は定数式エラーに表示できません:テンプレート引数1は無効ですエラー:テンプレート構造体std ::ペアのテンプレートパラメータリストの引数2で型/値が一致しません
これはただ不可能なことですか?これに対する代替ソリューションは何でしょうか? ご意見をお待ちしております。
c++ - ペアのプライオリティ キューのカスタム コンパレータ>
これは私にエラーを与えます
PairComparator
cplusplus.com フォーラムからコードを見つけました
c++ - ペアを持っているマップ内のペアの一部であるかどうかを確認する方法?
たとえば、このようなペアのような文字列のペアがありAccept-Language : RU ,
、httpリクエストヘッダーなどのマップを介して検索します。マップにそのようなペアがあるかどうかを知るために必要なのは、ブール値です。ソフト検索の方法。つまり、まったく同じペアを見つける必要はありませんが、ペアのようなAccept-Language : ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
ものも有効なペアであり、そのようなものが存在する場合は、マップにペアが含まれていることがわかります。C ++でそのような検索を実行するための関数を作成するにはどうすればよいですか?
c++ - メンバーが2つしかないstd::pairとstd::tupleの違いは?
メンバーが 2 つだけのstd::pair
と の間に違いはありますか? ( 2 つだけのメンバーを必要とし、多かれ少なかれ持つことができるstd::tuple
という明白なことに加えて...)std::pair
tuple
c++ - c++のstd::pairの配列に問題がありますか?
今日、いくつかのコードをいじっていて、たくさんのペアを配列に入れるというアイデアに出くわしましたが、それを機能させることができませんでした。コードは次のとおりです。
このプログラムの出力は、私が入力したものすべてではありません。
c++ - std::pair にコピー不可 (ただし移動可能) オブジェクトを格納する
次のように、std::pair 内にコピー不可能な (ただし移動可能な) オブジェクトを格納しようとしています。
しかし、gcc 4.6 で次のコンパイラ エラーが発生します。
std::pair<_T1, _T2>::pair(_U1&&, const _T2&)
コンパイラーがコンストラクターを呼び出そうとしているようですが、もちろん問題があります。std::pair<_T1, _T2>::pair(_U1&&, _U2&&)
代わりにコンパイラがコンストラクタを呼び出すべきではありませんか? ここで何が起こっているのですか?
編集:わかりました、明示的な移動コンストラクターを提供すると問題が解決することは理解していますが、まだ少し混乱しています。
boost::noncopyable
独自のプライベート コピー コンストラクターを宣言するのではなく、から継承することにより、クラスをコピー不可にするとします。
以下は正常に動作し、ムーブ コンストラクターが暗黙的に生成されることを示唆しています。
ただし、std::pair
それでも機能しません。
エラー:
さらに、= default
-ed デフォルト コンストラクターとムーブ コンストラクターを追加しても役に立ちません。
同じエラーが発生します。move コンストラクターの定義を自分で明示的に指定する必要があります。これは、クラスに多くのメンバーがある場合に面倒です。