C++ 参考手册

位置:首页 > C++ 参考手册 >容器库 >std::map > std::map<Key,T,Compare,Allocator>::begin, std::map<Key,T,Compare,Allocator>::cbegin

iterator begin();
(C++11 前)
iterator begin() noexcept;
(C++11 起)
const_iterator begin() const;
(C++11 前)
const_iterator begin() const noexcept;
(C++11 起)
const_iterator cbegin() const noexcept;
(C++11 起)

返回指向 map 首元素的迭代器。

map 为空,则返回的迭代器将等于 end()

range-begin-end.svg

参数

(无)

返回值

指向首元素的迭代器。

复杂度

常数。


示例

#include <iostream>
#include <map>
 
int main() {
  std::map<int, float> num_map;
  num_map[4] = 4.13;
  num_map[9] = 9.24;
  num_map[1] = 1.09;
  // 调用 a_map.begin() 及 a_map.end()
  for (auto it = num_map.begin(); it != num_map.end(); ++it) {
    std::cout << it->first << ", " << it->second << '\n';
  }
}

输出:

1, 1.09
4, 4.13
9, 9.24

使用自定义比较函数的示例

#include <cmath>
#include <iostream>
#include <map>
 
struct Point { double x, y; };
 
typedef Point * PointPtr;
// 比较二个 Point 指针的 x 坐标和 y 坐标
struct PointCmp {
    bool operator()(const PointPtr &lhs, const PointPtr &rhs) const { 
        return lhs->x < rhs->x; 
    }
};
 
int main() {
    // 注意即使 x 坐标不按顺序, map 仍将按 x 坐标升序迭代
    Point points[3] = { {2, 0}, {1, 0}, {3, 0} };
 
    // mag 是将结点地址发送到其在 x-y 平面上的模的映射
    // 尽管关键是指针到 Point ,我们希望按 x 坐标顺序而非按 Point 地址的顺序。
    // 这通过使用 PointCmp 类的比较方法进行。
    std::map<Point *, double, PointCmp> mag({
        { points,     2 },
        { points + 1, 1 },
        { points + 2, 3 }
    });
 
    // 从 0 更改每个 y 坐标为模
    for(auto iter = mag.begin(); iter != mag.end(); ++iter){
        auto cur = iter->first; // 指向 Node 的指针
        cur->y = mag[cur]; // 亦可使用 cur->y = iter->second;
    }
 
    // 更新并打印每个结点的模
    for(auto iter = mag.begin(); iter != mag.end(); ++iter){
        auto cur = iter->first;
        mag[cur] = std::hypot(cur->x, cur->y);
        std::cout << "The magnitude of (" << cur->x << ", " << cur->y << ") is ";
        std::cout << iter->second << '\n';
    }
 
    // 以基于范围的 for 循环重复以上内容
    for(auto i : mag) {
        auto cur = i.first;
        cur->y = i.second;
        mag[cur] = std::hypot(cur->x, cur->y);
        std::cout << "The magnitude of (" << cur->x << ", " << cur->y << ") is ";
        std::cout << mag[cur] << '\n';
        // 注意与 std::cout << iter->second << '\n'; 相反,上述的 
        // std::cout << i.second << '\n'; 不会打印更新的模
    }
}

输出:

The magnitude of (1, 2) is 2.23607
The magnitude of (2, 1) is 2.23607
The magnitude of (3, 3) is 4.24264
The magnitude of (1, 2.23607) is 2.44949
The magnitude of (2, 2.23607) is 3
The magnitude of (3, 4.24264) is 5.19615

参阅

返回指向容器尾端的迭代器
(公开成员函数)