有您能做到發現一個STL(標準模板庫)地圖的關鍵多種方式。您可以使用已由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關鍵字最有利的唯一地方。帶自動關鍵字,
auto it = dict.begin(); /*or*/ auto it = dict.find(name)
是您所需要的全部。
2-)當指針用於一維連續數據類型(如數組)時,迭代器會給出指針錯覺。但是,STL容器可能不會在內存上連續分發數據(鏈接列表,二叉樹是典型示例),而是可以遍佈堆棧。爲了給出指針算術的錯覺和使用迭代器是有用的抽象。 C++ 11基於範圍的循環可以很好地替代迭代器。
std::map<std::string, int> dict;
for(auto & kv : dict){ /* Program logic goes here */ }
在這種情況下,kv將包含鍵值對並且是std :: pair的類型。
3-)您可以使用std :: count
方法:: Map來檢查映射中是否存在鍵。 count
和find
之間的區別是count
返回一個數值,而find
返回一個迭代器。
將您的C++書籍打開到地圖上的章節。我相信你的書解釋瞭如何使用map的find()方法。 –
你可以使用'std :: map :: const_iterator result = PhBook.find(input);如果(result == PhBook.end())「cout <<」name not found「<< endl; else cout <<」phone「< second << std :: endl;' –
cppreference示例顯示瞭如何做你在問什麼,你不瞭解哪部分或者沒有做你想做的事? –