在std::map 中使用基於範圍的for() 迴圈
C 11 及更高版本中基於範圍的for( ) 循環提供一種迭代容器的便捷方法。雖然範例經常展示向量等簡單容器,但將它們與地圖等更複雜的資料結構一起使用時會出現混亂。
當地圖使用基於範圍的 for() 迴圈時,元素類型就沒那麼簡單看起來。考慮以下範例:
<code class="cpp">std::map<foo, bar> testing = { /*...blah...*/ }; for (auto abc : testing) { std::cout << abc << std::endl; // ? should this give a foo? a bar? std::cout << abc->first << std::endl; // ? or is abc an iterator? }</code>
與向量不同,循環變數是容器元素的類型(例如int),映射的循環變數abc 實際上是std::pair< 類型;const foo, bar>.這意味著abc 持有一對包含映射的鍵和值的對。
在C 17 及更高版本中,您可以使用結構化綁定直接存取鍵和值:
<code class="cpp">for (auto& [key, value] : myMap) { std::cout << key << " has value " << value << std::endl; }</code>
在C 11 和C 14 中,您仍然可以使用增強的for 循環迭代映射,但是您必須手動提取鍵和值:
<code class="cpp">for (const auto& kv : myMap) { std::cout << kv.first << " has value " << kv.second << std::endl; }</code>
重要的是要理解循環變數abc 或這些範例中的kv 不是迭代器。相反,它表示包含當前映射元素的鍵和值的對的副本。在考慮對循環內的地圖元素進行修改或引用時,這種區別至關重要。
以上是基於範圍的 for() 迴圈如何與 C 中的 std::map 一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!