首页 > 后端开发 > C++ > 基于范围的 for() 循环如何与 C 中的 std::map 一起使用?

基于范围的 for() 循环如何与 C 中的 std::map 一起使用?

Linda Hamilton
发布: 2024-10-29 03:27:29
原创
1114 人浏览过

 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板