1. ホーム
  2. c++

地図から値を取得する方法を教えてください。

2023-08-14 09:17:21

質問

私は map という名前の valueMap を次のようにします。

typedef std::map<std::string, std::string>MAP;
MAP valueMap;
...
// Entering data.

そして、このマップを関数に参照渡ししています。

void function(const MAP &map)
{
  std::string value = map["string"];
  // By doing so I am getting an error.
}

関数への参照として渡されるmapから値を取得するにはどうしたらよいでしょうか。

どのように解決するのですか?

std::map::operator[] はconstでないメンバ関数であり、constの参照を持っています。

のシグネチャを変更する必要があるか function を行うかです。

MAP::const_iterator pos = map.find("string");
if (pos == map.end()) {
    //handle the error
} else {
    std::string value = pos->second;
    ...
}

operator[] はデフォルトで構成された値をマップに追加し、それへの参照を返すことで、エラーを処理します。これはconstの参照しかない場合には使い物にならないので、別の方法をとる必要があります。

あなたは 可能性を無視して string value = map.find("string")->second; と書くこともできますが、もしあなたのプログラムロジックが "string" がすでにキーであることが保証されている場合。明らかな問題は、もしあなたが間違っていれば、未定義の動作が発生することです。