亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在std :: map中使用基于范圍的for()循環?

如何在std :: map中使用基于范圍的for()循環?

C++
蠱毒傳說 2019-11-21 15:10:18
C ++ 11基于范圍的for()循環的常見示例總是像這樣簡單:std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };for ( auto xyz : numbers ){     std::cout << xyz << std::endl;}在這種情況下xyz是int。但是,當我們有地圖時會發生什么?在此示例中,變量的類型是什么: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?}當遍歷的容器很簡單時,基于范圍的for()循環將為我們提供每個項,而不是迭代器。很好...如果它是迭代器,那么我們總是要做的第一件事就是反引用它。但是,對于諸如地圖和多圖之類的東西,我感到困惑。(我仍然在g ++ 4.4上,而基于范圍的循環在g ++ 4.6+中,所以我還沒有機會嘗試它。)
查看完整描述

3 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

容器的每個元素都是a map<K, V>::value_type,這是typedeffor std::pair<const K, V>。因此,在C ++ 17或更高版本中,您可以編寫


for (auto& [key, value]: myMap) {

    std::cout << key << " has value " << value << std::endl;

}

或作為


for (const auto& [key, value]: myMap) {

    std::cout << key << " has value " << value << std::endl;

}

如果您不打算修改值。


在C ++ 11和C ++ 14中,可以使用增強的for循環自行提取每對,然后手動提取鍵和值:


for (const auto& kv : myMap) {

    std::cout << kv.first << " has value " << kv.second << std::endl;

}

如果您需要值的只讀視圖,也可以考慮標記kv變量const。


查看完整回答
反對 回復 2019-11-21
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

在C ++ 17中,這稱為結構化綁定,它允許以下操作:


std::map< foo, bar > testing = { /*...blah...*/ };

for ( const auto& [ k, v ] : testing )

{

  std::cout << k << "=" << v << "\n";

}


查看完整回答
反對 回復 2019-11-21
  • 3 回答
  • 0 關注
  • 1489 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號