タグ付けされた質問 「stdmap」


17
std :: mapからすべてのキー(または値)を取得してベクターに入れる方法は?
これは私が出てくる可能な方法の1つです。 struct RetrieveKey { template <typename T> typename T::first_type operator()(T keyValuePair) const { return keyValuePair.first; } }; map<int, int> m; vector<int> keys; // Retrieve all keys transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey()); // Dump all keys copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n")); もちろん、別のファンクターRetrieveValuesを定義して、マップからすべての値を取得することもできます。 これを簡単に達成する他の方法はありますか?(なぜstd :: mapにそうするためのメンバー関数が含まれていないのか、いつも疑問に思っています。)
246 c++  dictionary  stl  stdmap 

12
STLマップでは、[]よりもmap :: insertを使用する方が良いですか?
しばらく前に、STL マップに値を挿入する方法について同僚と話し合いました。map[key] = value; 自然な感じで読みやすいので好き だったが、彼は好きだった map.insert(std::make_pair(key, value)) 私は彼に尋ねたところ、どちらも挿入の方が良い理由を思い出せませんが、スタイルの好みだけではなく、効率などの技術的な理由があったのだと思います。SGIのSTLの参照は、単純に言う、「厳密に言えば、このメンバ関数は不要である:それは便宜上存在します。」 誰かがその理由を教えてもらえますか、それともそこにあることを夢見ていますか?
201 c++  stl  map  stdmap 

9
マップに挿入する推奨/慣用の方法は何ですか?
に要素を挿入する4つの異なる方法を特定しましたstd::map。 std::map<int, int> function; function[0] = 42; function.insert(std::map<int, int>::value_type(0, 42)); function.insert(std::pair<int, int>(0, 42)); function.insert(std::make_pair(0, 42)); それらのうちどれが好ましい/慣用的な方法ですか?(そして私が考えていない別の方法がありますか?)
111 c++  stl  insert  stdmap  std-pair 

9
std :: map insertまたはstd :: map find?
既存のエントリを保持したいマップを想定しています。20%の確率で、挿入するエントリは新しいデータです。返されたイテレータを使用してstd :: map :: findを実行してからstd :: map :: insertを実行する利点はありますか?または、挿入を試みてから、レコードが挿入されたか、挿入されなかったかをイテレータが示すかどうかに基づいて動作する方が速いですか?
90 c++  optimization  stl  stdmap 

6
findメソッドを使用した後にstd :: mapを更新する方法は?
メソッドstd::mapを使用した後にキーの値を更新するにはどうすればよいfindですか? 私はこのようなマップとイテレータ宣言を持っています: map <char, int> m1; map <char, int>::iterator m1_it; typedef pair <char, int> count_pair; マップを使用して、文字の出現回数を保存しています。 Visual C ++ 2010を使用しています。
90 c++  map  stl  stdmap 


4
マップ用に独自のコンパレータを作成するにはどうすればよいですか?
typedef map<string, string> myMap; に新しいペアを挿入するmyMapと、キーstringを使用して独自の文字列コンパレータで比較します。そのコンパレータをオーバーライドすることは可能ですか?たとえば、キーstringをアルファベットではなく長さで比較したいと思います。または、マップを並べ替える他の方法はありますか?
83 c++  stl  stdmap 

9
std :: mapのキーとしてchar *を使用する
次のコードが機能しない理由を理解しようとしています。これは、キータイプとしてchar *を使用する場合の問題であると想定していますが、どのように解決できるのか、なぜ発生するのかわかりません。私が(HL2 SDKで)使用する他のすべての関数は使用するchar*ので、使用std::stringすると多くの不必要な複雑さが発生します。 std::map<char*, int> g_PlayerNames; int PlayerManager::CreateFakePlayer() { FakePlayer *player = new FakePlayer(); int index = g_FakePlayers.AddToTail(player); bool foundName = false; // Iterate through Player Names and find an Unused one for(std::map<char*,int>::iterator it = g_PlayerNames.begin(); it != g_PlayerNames.end(); ++it) { if(it->second == NAME_AVAILABLE) { // We found an Available …
81 c++  map  stdmap 

1
(一部の)アイテムを1つのstd :: mapから別のstd :: mapに効率的に移動する方法は?
2つのstd::map<>オブジェクトがaありb、いくつかの述語に基づいて、1つのマップから別のマップにいくつかの要素(ノード)を移動(extract+ insert)したいと思いpます。 for (auto i = a.begin(); i != a.end(); ++i) if (p(*i)) b.insert(a.extract(i)) このコードはclangでsegfaultします。問題は、iノードがaから抽出された後のの増加であると思います。 ポストインクリメントを使用してこれを修正する正しい/唯一の方法はありますか?例: for (auto i = a.begin(); i != a.end();) if (p(*i)) b.insert(a.extract(i++)) else ++i; 編集:現在の設定ではこれを再現できないため、「gccで動作する理由」に関する部分を削除しました。ある時点でそれが以前は使用されていたと確信していますが、gcc 9.2.1では(segfaultの代わりに)デッドロックが発生します。いずれにしても、後の増分extract()は機能しません。
8 c++  stl  c++17  stdmap 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.