【问题标题】:I am trying to create a method which returns a pair using pointer arithmetic howevever it givies an error?我正在尝试创建一个使用指针算术返回一对的方法,但是它给出了错误?
【发布时间】:2016-09-17 04:45:04
【问题描述】:

我正在尝试使用名为map <int, vertex> nodemap的映射中的迭代器返回一对,但是我遇到了一个错误,上面写着:error: invalid operands to binary expression ('std::map<int, vertex>::iterator' (aka '__map_iterator<typename __base::iterator>') and 'int') std::pair<int, vertex> node = *(it + v);

下面是我的功能代码:

std::pair<int, vertex> Graph::getMap(int v)
{
  std::map <int, vertex>::iterator it = nodemap.begin();
  std::pair<int, vertex> node = *(it + v);
  return node;
}

我假设指针算术是可能的,并且映射由 Stack Question 中提到的对组成。

感谢您的帮助!

【问题讨论】:

  • 您是在寻找地图中的第 v 个元素还是带有键 v 的节点?
  • 见 GWW 的回答。只需使用 nodemap.find(v) 获取元素。 std::map 是一个关联容器。

标签: c++ dictionary data-structures stl std-pair


【解决方案1】:

std::map 返回一个bidirectional iterator,不支持加法。您可以使用std::advance(it, v);,但是,我不确定您为什么要像这样增加map::iterator。如果您想使用密钥 v 检索 vertex,您可以使用:

std::map <int, vertex>::iterator it = nodemap.find(v);

【讨论】:

    【解决方案2】:

    错误来自这一行:

    std::pair<int, vertex> node = *(it + v);
    

    std::map::iteratorbidirectional,这意味着它可以在上面使用++--

    为了使用“iterator + intValue”,迭代器应该是Random Access 迭代器。 std::map 不是这样的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 2019-03-09
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      • 2021-10-17
      相关资源
      最近更新 更多