にイテレータを返し、それにイテレータを返します。 STLライブラリですでに提供されているメソッドを使用することも、独自のメソッドを使用して同じタスクを実行することもできます。私はあなたのソリューションを簡単にするのに役立つヒントをいくつか提供しようとします。
1-)すでに述べたように、std :: Mapのイテレータを定義し、find関数の結果を既に定義されているイテレータに割り当てることができます。しかし、イテレータを宣言することが面倒になることがあります。あなたは今まであなたが上記のタイプのイテレータを定義したいとき、あなたは宣言する必要がありますそのような場合には、ネストされたマップオブジェクト
std::map<std::string, std::map<std::string, int>> dict;
dict["name"]["phone"] = 1234;
を定義するために起こる場合たとえば、
std::map<std::string, std::map<std::string, int>>::iterator it = dict.begin();
は費やすことイテレータを宣言できるだけの努力は、非常識で時間がかかります。幸運なことに、C++ 11には、コンパイル時に自動的に型を推論するautoキーワードが付いていました。これは私が最も有益な自動キーワードを見つけた唯一の場所です。自動キーワードでは、
auto it = dict.begin(); /*or*/ auto it = dict.find(name)
すべてが必要です。
2)イテレータは、配列などの1次元の連続したデータ型でポインタが使用されている場合に、ポインタの錯覚を与えます。ただし、STLコンテナはメモリ上で連続してデータを配布することはできません(リンクリスト、バイナリツリーは典型的な例です)。ポインタの算術演算とイテレータの錯覚を与えることは、有用な抽象化である。 C++ 11の範囲ベースのループは、イテレータの代用として適しています。
std::map<std::string, int> dict;
for(auto & kv : dict){ /* Program logic goes here */ }
この場合、kvにはキーと値のペアが含まれ、std :: pairのタイプになります。
3-)count
標準のメソッドを使用すると、マップ内にキーが存在するかどうかのチェックを行うことができます。 count
とfind
の差がcount
の場合は数値を返し、find
の場合は反復子を返します。
マップ上の章のC++ブックを開きます。あなたの本は地図の 'find()'メソッドの使い方を説明していると確信しています。 –
'std :: map :: const_iterator result = PhBook.find(input);を使っても構いません。 "result" == PhBook.end()) "cout <<" name not found "<< endl; else cout <<" phone "< second << std :: endl; –
cppreferenceの例は、あなたが尋ねていることをしてくださいそれを理解していないか、実際にしたいことをしていないのですか? –