欢迎您访问新疆栾骏商贸有限公司,公司主营电子五金轴承产品批发业务!
全国咨询热线: 400-8878-609

新闻资讯

技术学院

C++如何遍历map容器_C++ map迭代器与auto关键字遍历方法

作者:穿越時空2025-11-26 00:00:00
C++中遍历map常用迭代器和auto关键字,推荐使用范围for循环结合const auto&高效访问键值对。

在C++中,map 是一种关联容器,用于存储键值对(key-value pairs),并自动根据键进行排序。遍历 map 容器是日常开发中的常见操作,常用的方法包括使用迭代器和 auto 关键字。下面详细介绍这两种方式。

使用迭代器遍历 map

map 提供了 begin() 和 end() 成员函数,分别返回指向第一个元素和末尾之后位置的迭代器。通过循环结合迭代器可以访问每个键值对。

map 的迭代器指向的是 std::pair 类型的对象,first 成员为键,second 成员为值。

#include 
#include 
using namespace std;

int main() {
    map scores = {{"Alice", 95}, {"Bob", 87}, {"Charlie", 92}};

    // 使用普通迭代器遍历
    for (map::iterator it = scores.begin(); it != scores.end(); ++it) {
        cout << "Key: " << it->first << ", Value: " << it->second << endl;
    }

    return 0;
}

输出结果:

Key: Alice, Value: 95
Key: Bob, Value: 87
Key: Charlie, Value: 92

使用 const_iterator 遍历只读 map

如果 map 是 const 或你只想进行只读访问,应使用 const_iterator,这样更安全且符合语义。

for (map::const_iterator it = scores.cbegin(); it != scores.cend(); ++it) {
    cout << it->first << ": " << it->second << endl;
}

使用 auto 关键字简化遍历(C++11 起)

C++11 引入了 auto 关键字,编译器可自动推导变量类型,极大简化了迭代器声明。

// 使用 auto 声明迭代器
for (auto it = scores.begin(); it != scores.end(); ++it) {
    cout << it->first << " -> " << it->second << endl;
}

使用范围 for 循环 + auto(推荐写法)

C++11 还支持基于范围的 for 循环,结合 auto 可以写出更简洁、易读的代码。

// 范围 for 循环遍历 map
for (const auto& pair : scores) {
    cout << pair.first << ": " << pair.second << endl;
}

说明:

  • const auto& 表示对每一对键值引用访问,避免拷贝 pair 对象,提高效率。
  • 如果需要修改值,可使用 auto&,但不能修改 key(map 的 key 是 const 的)。

遍历时修改 value 值的例子

// 修改 map 中的 value
for (auto& pair : scores) {
    pair.second += 5;  // 加分操作
    cout << pair.first << "'s new score: " << pair.second << endl;
}

注意:不能通过 pair.first 修改 key,因为 map 中的 key 是不可变的。

基本上就这些。使用 auto 和范围 for 循环是现代 C++ 推荐的方式,代码更清晰、不易出错。迭代器方式在需要反向遍历或精确控制时仍有用武之地。掌握这些方法,能更高效地处理 map 容器。