与えられたキーがマップにあるかどうかをチェックしようとしているのですが、なんとなくできません。
typedef map<string,string>::iterator mi;
map<string, string> m;
m.insert(make_pair("f","++--"));
pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want
cout << p.first;//I'm getting error here
では、どうすればpにあるものを印刷できますか?
map::findが欲しいのではないでしょうか。もし
m.find("f")が
m.end()` と等しければ、そのキーは見つかりませんでした。そうでなければ、findは見つかった要素を指すイテレータを返します。
エラーになるのは、p.first
がイテレータだからで、これはストリーム挿入には使えません。最後の行をcout << (p.first)->first;
に変更してください。pはイテレータのペア、
p.firstはイテレータ、
p.first->first`はキーとなる文字列です。
マップは与えられたキーに対して1つの要素しか持つことができないので、equal_range
はあまり役に立ちません。これはすべての連想コンテナで定義されているので、mapでも定義されていますが、multimapではもっと面白いです。