C ++迭代映射

时间:2014-02-27 07:29:11

标签: c++ map stl

众所周知,以下代码用于在C ++中迭代map

for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
{
    std::cout << itr->first << " => " << itr->second << '\n';
}

itr 声明为 std :: map :: iterator 。第一和第二成员既不在std::map也不在std::iterator中声明。那怎么可以访问?

2 个答案:

答案 0 :(得分:8)

std::map的元素是std::pair<key_type, mapped_type>,因此取消引用地图迭代器会为您提供其中一个元素的引用。

std::pair类模板包含firstsecond成员。

答案 1 :(得分:2)

迭代器背后的基本思想是它们是用于访问数据的“神奇”对象,其行为类似于数组上的指针 - 即您使用算术运算符(例如++--)来移动并解除引用(使用*->)来访问数据。

因此,itr“喜欢”指向std::pair<char, int>的指针,因此您可以通过*运算符访问取消引用它的数据(生成键/值{{1 }}或使用pair运算符,如您的示例所示。