【问题标题】:implementing a map container with getter for iterator使用迭代器的 getter 实现地图容器
【发布时间】:2014-01-14 10:19:33
【问题描述】:

我正在尝试使用 *iterator 访问值和键,如图所示:

for (Map<K, V>::iterator it = map.begin(); it != map.end(); ++it) {
V& value = (*it).getValue(); // or*it.getValue();
}

它不起作用,即使下拉菜单也不显示任何内容(使用 Eclipse)。 让它工作的唯一方法是执行以下操作:

Node<K, V>& node = *it;
V& value = node.getValue();

我有 const 和无 const getter,还有 * 运算符返回对节点的引用。

编辑:
我正在实现我自己的地图代码。

编辑 2 我想通了,我的 * 运算符正在返回一个指针,我认为它返回 & 。 谢谢大家

【问题讨论】:

  • 你得到什么错误? BTW 是 K 和 V 模板参数?
  • 看起来您使用的不是std::map,而是其他一些容器。您需要发布一些代码来显示容器迭代器的外观。
  • 什么是Map?它是std::map 的别名,还是非标准的别名?
  • 我没有使用 (*it).getValue(); 运行代码,是的,它们是模板参数

标签: c++ iterator getter


【解决方案1】:

如果映射类型是std::map,或符合标准关联容器接口的类似类型,则它包含std::pair&lt;const K, V&gt; 类型的键值对,这就是您取消引用迭代器时得到的结果。

要访问该值,您需要该对的第二个元素:

V & value = it->second;

如果地图类型不符合标准接口,那么您需要查看其文档;我无法猜测它是如何工作的。

【讨论】:

  • @Emad4U:在这种情况下,最好发布确切的错误消息,以及 iteratorNode 的(最小)定义,显示 operator* 和 @ 的声明987654327@。如果我们看不到它,就无法猜测您自己的代码可能有什么问题。
猜你喜欢
  • 2016-03-30
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 2021-11-16
相关资源
最近更新 更多