[解決済み】mapがキーに値を含むかどうかを判断する?
2022-03-30 17:44:25
質問
STLマップが与えられたキーに対応する値を含んでいるかどうかを判断する最良の方法は何ですか?
#include <map>
using namespace std;
struct Bar
{
int i;
};
int main()
{
map<int, Bar> m;
Bar b = {0};
Bar b1 = {1};
m[0] = b;
m[1] = b1;
//Bar b2 = m[2];
map<int, Bar>::iterator iter = m.find(2);
Bar b3 = iter->second;
}
これをデバッガで調べると、次のようになります。
iter
は単なるゴミデータです。
この行をコメントアウト解除すると
Bar b2 = m[2]
デバッガでは
b2
は
{i = 0}
. (未定義のインデックスを使うと、すべて空/未初期化の値を持つ構造体が返されるということでしょうか)
どちらの方法も、それほど素晴らしいものではありません。私が本当に欲しいのは、こういうインターフェースです。
bool getValue(int key, Bar& out)
{
if (map contains value for key)
{
out = map[key];
return true;
}
return false;
}
このような内容のものは存在するのでしょうか?
解決方法は?
<ブロッククオートこのようなものは存在するのでしょうか?
いいえ、stl マップ・クラスで、あなたは
::find()
を使用してマップを検索し、返されたイテレータを
std::map::end()
だから
map<int,Bar>::iterator it = m.find('2');
Bar b3;
if(it != m.end())
{
//element found;
b3 = it->second;
}
もちろん、自分で
getValue()
ルーチンを使用する理由はありません。
out
を使うコツをつかんだら、このような使い方をするのではないでしょうか?
std::map::find()
を使えば、時間を無駄にすることはないでしょう。
また、あなたのコードは少し間違っています。
m.find('2');
であるキーバリューをマップから探します。
'2'
. C++コンパイラは暗黙のうちに'2'をint型に変換してしまうので、結果として'2'のASCIIコードの数値になってしまい、望んだものではありません。
この例のキータイプは
int
のように検索したい。
m.find(2);
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] JavaでMapをListに変換する方法は?
-
[解決済み] C++ std::map に指定されたキーが存在するかどうかを調べる方法
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
-
[解決済み] std::mapにキーがあるかどうかをinsertせずに確認する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] C++ std::map に指定されたキーが存在するかどうかを調べる方法