迭代器>第二个是什么意思?
在C ++中, std::map<>::iterator的types是什么?
我们知道std::map<A,B>::iteratortypes的对象有一个重载operator -> ,它返回一个std::pair<A,B>* ,并且std::pair<> first和second成员。
但是,这两个成员是相对应的,为什么我们必须访问存储在地图中的值呢?
我相信你知道一个std::vector<X>存储了大量的X对象,对吧? 但是如果你有一个std::map<X, Y> ,它实际存储的是一堆std::pair<const X, Y> s。 这正是一张地图 – 它将键和相关值组合在一起。
当你迭代一个std::map ,你正在迭代所有这些std::pair 。 当您取消引用其中一个迭代器时,会得到一个包含该键及其关联值的std::pair 。
std::map<std::string, int> m = /* fill it */; auto it = m.begin();
在这里,如果你现在做*it ,你会得到地图上第一个元素的std::pair 。
现在,typesstd::pair可以通过两个成员访问它的元素: first和second 。 所以如果你有一个std::pair<X, Y>叫做p , p.first是一个X对象而p.second是一个Y对象。
所以现在你知道解引用一个std::map迭代器给你一个std::pair ,然后你可以用first和second访问它的元素。 例如, (*it).first (*it).second将给你的关键和(*it).second将给你的价值。 这相当于it->first , it->second 。
std::map (它也是通过取消引用该映射的迭代器而获得的expression式的types)的types,其键为K并且值为V是std::pair<const K, V> -键是const可以防止干扰映射值的内部sorting。
std::pair<>有两个成员命名first和second (见这里 ),具有相当直观的含义。 因此,给i一个迭代器到一个特定的地图,expression式:
i->first
这相当于:
(*i).first
引用迭代器指向的pair对象的第一个 ( const )元素 – 即它指向映射中的一个键 。 相反,expression式:
i->second
这相当于:
(*i).second
指对中的第二个元素 – 即映射到地图中的对应值 。