首頁  >  文章  >  後端開發  >  基於範圍的 for() 迴圈如何與 C 中的 std::map 一起使用?

基於範圍的 for() 迴圈如何與 C 中的 std::map 一起使用?

Linda Hamilton
Linda Hamilton原創
2024-10-29 03:27:291067瀏覽

 How do Range-Based for() Loops Work with std::map in C  ?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn