問題タブ [stdmap]
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++ - C++ の `std::map` に参照を格納できないのはなぜですか?
参照はポインターではなく、オブジェクトへのエイリアスであることを理解しています。しかし、これがプログラマーとしての私にとって正確に何を意味するのか、つまり、ボンネットの下の参照とは何なのか、まだ理解していません。
これを理解する最善の方法は、参照をマップに保存できない理由を理解することだと思います。
参照をポインタよりも構文上の甘いものと考えるのをやめる必要があることはわかっていますが、どうすればよいかわかりません:/
c++ - キーが存在しない場合、std::map operator[] がオブジェクトを作成するのはなぜですか?
私はすでにこの質問をどこかで見たと確信しています(comp.lang.c ++?Googleもそこで見つけられないようです)が、ここで簡単に検索しても見つからないようなので、ここにあります:
キーが存在しない場合、std::map operator[] がオブジェクトを作成するのはなぜですか? わかりませんが、他のほとんどの operator[] (std::vector など) と比較すると、これは直感に反するように思えます。使用する場合は、インデックスが存在することを確認する必要があります。std::map でこの動作を実装する理由は何だろうと思っています。私が言ったように、ベクトルのインデックスのように振る舞い、無効なキーでアクセスしたときにクラッシュする方が直感的ではないでしょうか (未定義の動作だと思います)。
答えを見た後に質問を絞り込む:
わかりましたこれまでのところ、基本的に安いので、なぜそうしないのか、または同様のことを言う多くの回答を得ました. 私はそれに完全に同意しますが、そのために専用の関数を使用しないのはなぜですか(Javaにはoperator []がなく、関数はputと呼ばれるとコメントの1つが言ったと思います)?私のポイントは、なぜ map operator[] がベクトルのように機能しないのですか? ベクトルの範囲外のインデックスで operator[] を使用すると、たとえ安価であっても要素を挿入したくありません。これは、おそらくコードのエラーを意味するためです。私のポイントは、なぜそれがマップと同じではないのかということです。つまり、私にとって、マップで operator[] を使用することは、このキーが既に存在することを知っていることを意味します (何らかの理由で、挿入しただけで、どこかに冗長性があります)。その方が直感的にわかりやすいと思います。
そうは言っても、現在の動作を operator[] で実行する利点は何ですか? 多分それはそのようにより明確なコードを与えるでしょうか?知らない。
別の答えは、それはすでにそのように存在していたので、なぜそれを保持しないのですか? したがって、私の質問は基本的に次のとおりです。なぜそのように実装することを選択するのか、つまり、他の演算子[]との一貫性がやや欠けていることを意味します。どのようなメリットがありますか?
ありがとう
c++ - std:map を使用するとクラッシュする
私の SDL プログラムでは、マップ構造を使用して、特定のクラス内のオブジェクトの「無限」配列をシミュレートしています。コードは問題なくコンパイルできますが、プログラムを実行すると、マップを使用する関数の 1 つがトリガーされるとすぐにプログラムがクラッシュし、値 3 が返されます。
だから、これがまさに私がやっていることです:
MyFunction() が MyClass オブジェクトから呼び出されると、クラッシュが発生します。MyMap で何らかの使用が行われるたびに発生するようです: 最後から 2 番目の行をコメントアウトして i を返そうとするとクラッシュし、i = 1 を設定してオブジェクトを MyMap[i] に割り当てるとクラッシュします。
地図を使ったのはこれが初めてなので、地図を正しく使っているか確信が持てません。これはどこかの基本的な間違いですか?誰かが私を正しい方向に向けることができますか? 乾杯。
c++ - std::mapの最初のn個の要素を取得する方法
C ++ std :: mapには.resize()メンバー関数がないので、疑問に思っていたのですが、最大n個の要素を持つstd::mapを取得するにはどうすればよいでしょうか。
明らかな解決策は、0からnまでのループを作成し、n番目のイテレータをstd :: Erase()の最初のパラメータとして使用することです。
ループを必要とせず(少なくとも私のユーザーコードでは)、より「STLの方法」であるソリューションがあるかどうか疑問に思いました。
c++ - 文字列をキー、ostream を値としてマップを設定するにはどうすればよいですか?
次の方法で C++ でコンテナを使用しようとしてmap
います: キーは でstring
、値は type のオブジェクトですofstream
。私のコードは次のようになります。
ただし、上記のコードをコンパイルしようとすると、次のエラーが発生します。
何がうまくいかないのですか?を使用してこれを行うことができない場合map
、そのようなキーと値のペアを作成する他の方法はありますか?
注: コードをテストすると、正常にmap<string, int> foo;
動作します。
c# - HashTableの一般的なバージョンはありますか?
C ++ std::mapのように機能するクラスが必要です。より具体的には、私はそのような行動が必要です:
map< string, vector<int> > my_map;
それは可能ですか?
c++ - std::map を一度初期化して、クラスのすべてのオブジェクトで使用できるようにする方法は?
次のように定義された列挙 StackIndex があります。
という形式のタプルの束のMoveSequence
ラッパーであるというクラスを作成しました。std::deque
<StackIndex, StackIndex>
関数で使用するために、 aを aに変換するクラスの静的std::map
メンバーを作成できると思いました。しかし、試してみると、エラーが発生しました:MoveSequence
StackIndex
std::string
Print()
std::map を静的メンバーとして作成できない場合、オブジェクトの出力に使用できるaStackIndex
を a に変換する std::map を作成する別の方法はありますか?std::string
MoveSequence
ありがとう
ビーバンド。
c++ - キーとして構造体と一緒に STL マップを使用することは不可能ですか?
次のコードがあります。
構造体のインスタンスを にマップしようとするとNode
、int
コンパイル エラーが発生しました。なんで?