gpt4 book ai didi

c++ - 如何在 std::map 中使用基于范围的 for() 循环?

转载 作者:bug小助手 更新时间:2023-10-28 01:31:54 24 4
gpt4 key购买 nike

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。但是,当我们有 map 之类的东西时会发生什么?本例中变量的类型是什么:

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() 循环会给我们每个项目,而不是迭代器。这很好......如果它是迭代器,我们总是要做的第一件事就是取消引用它。

但我对 map 和多 map 等内容的期望感到困惑。

(我还在使用 g++ 4.4,而基于范围的循环在 g++ 4.6+ 中,所以我还没有机会尝试。)

最佳答案

容器的每个元素都是一个map<K, V>::value_type , 这是一个 typedef对于 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如果您想要只读的值 View 。

关于c++ - 如何在 std::map 中使用基于范围的 for() 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com