unordered_map <k,v =“”> :: iterator来自哪里?

时间:2017-10-26 03:02:33

标签: c++ stl iterator

当我使用std::unordered_map<K, V>时,我知道每个键值对的迭代器都是std::unordered_map<K, V>::iterator类型。我也知道迭代器本身指的是pair<const K, V>。但是,我知道迭代器指向一对的唯一原因是查看示例代码。这种行为在哪里定义?

例如,如果我转到the documentation at cppreference.com,我看不到解释此行为的位置。它只表示成员iterator被定义为ForwardIterator

所以,我的问题是,聪明的开发人员将如何知道std::unordered_map<K, V>::iterator实际代表什么?我确信我缺少一些逻辑上的飞跃。

2 个答案:

答案 0 :(得分:1)

对于STL容器

类型为iterator的对象在被引用时返回类型为reference的对象,该对象是对value_type类型的对象的引用。

这些都是在container

中定义的

注意std :: map被定义为容器。此信息是本文档的一部分。

http://en.cppreference.com/w/cpp/concept/Container

答案 1 :(得分:0)

<块引用>

那么,我的问题是,聪明的开发人员如何知道 std::unordered_map<K, V>::iterator 实际代表什么?我确定我遗漏了一些逻辑上的飞跃。

几分钟前,此页面 (https://en.cppreference.com/w/cpp/container/unordered_map) 现在显示下面的图像。

注意我突出显示的部分。现在清楚地表明 iterator 是“to value_type”,而 const iterator 是“to const value_type”。并且 value_type 被指定为 std::pair<const Key, T>。因此,取消引用一个交互器 (*my_iterator) 会为您提供一个 value_type 类型的对象,在本例中为 std::pair<const Key, T> - 对于 std::unordered_map。现在应该清楚了。

enter image description here

参考:

在我研究这个时,我发现相关链接非常有用,按照从最有用到最无用的顺序:

  1. [最优秀的文章] https://thispointer.com/how-to-iterate-over-an-unordered_map-in-c11/
  2. [关于迭代器的优秀一般信息] https://www.cplusplus.com/reference/iterator/
  3. [cplusplus.com std::unordered_map 参考页] https://www.cplusplus.com/reference/unordered_map/unordered_map/
  4. [cppreference.com std::unordered_map 参考页] https://en.cppreference.com/w/cpp/container/unordered_map

另见:

  1. How to use range-based for() loop with std::map?