c++ - iterator->second 是什么意思?

标签 c++ stl iterator

在 C++ 中,std::map<>::iterator 的类型是什么? ?

我们知道一个对象 it类型 std::map<A,B>::iterator有一个重载的 operator ->返回 std::pair<A,B>* ,而 std::pair<>有一个 firstsecond成员(member)。

但是,这两个成员对应什么,为什么我们必须访问存储在映射中的值为it->second ?

最佳答案

我确定您知道 std::vector<X>存储一大堆X对象,对吧?但是如果你有一个 std::map<X, Y> ,它实际存储的是一大堆std::pair<const X, Y> s。这正是 map 的本质 - 它将键和关联的值配对在一起。

当您遍历 std::map 时,您正在遍历所有这些 std::pair s。当您取消引用其中一个迭代器时,您会得到 std::pair包含键及其关联值。

std::map<std::string, int> m = /* fill it */;
auto it = m.begin();

在这里,如果你现在这样做 *it ,你会得到std::pair map 中的第一个元素。

现在输入 std::pair 允许您通过两个成员访问其元素:firstsecond .因此,如果您有 std::pair<X, Y>调用p , p.firstX对象和 p.secondY对象。

所以现在您知道取消引用 std::map迭代器给你一个 std::pair ,然后您可以使用 first 访问其元素和 second .例如,(*it).first会给你 key 和(*it).second会给你值(value)。这些等价于 it->firstit->second .

关于c++ - iterator->second 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15451287/

相关文章:

c++ - 投给一个 child

c++ - 了解在 C++ 中打印链接列表的错误

c++ - 最快的 c++/STL 算法在成对的集合中查找字符串

c++ - 在 vector 中添加或删除项时调用函数

c++ - 了解运算符重载和迭代器为什么会打印出 “wrhrwwr”?

c++ - 给定数字与重复组合的算法? C++

c++ - CComPtr 的 vector 还需要 CAdapt 吗?

c++ - 为什么 C++ 中的 set::end 迭代器取消引用集合中的元素数量?

c++ - 如果字符串 vector 包含 char 'p',我如何检查 C++

c++ - 为什么从属性页调用 afxmessagebox 到扩展 dll 时 mfc 死锁