在std :: map的reverse_iterator上与“ operator-”不匹配

时间:2018-07-12 15:21:42

标签: c++ c++11 stl iterator stdmap

我有一个std::map,并且我试图以一种有效的方式将所有条目与所有其他条目进行比较。我的思考过程是,我将有一个嵌套循环,该循环的起始位置应在当前位置之后。

我有以下代码作为我要完成的工作的示例:

#include <iostream>
#include <string>
#include <map>

int main(int argc, char* argv[])
{
  std::map<std::string, std::string> m;
  m["one"]    = "a";
  m["two"]    = "b";
  m["three"]  = "c";
  m["four"]   = "d";
  m["five"]   = "e";
  m["six"]    = "f";
  m["seven"]  = "g";

  for (auto outerIterator = m.begin(); outerIterator != m.end(); ++outerIterator)
  {
    std::cout << outerIterator->second << std::endl;

    for (auto innerIterator = outerIterator + 1; innerIterator != m.end(); ++innerIterator)
    {
      std::cout << " > " << innerIterator->second << std::endl;
    }
  }

  return 0;
}

尝试此操作时,出现以下错误:

error: no match for ‘operator+’ (operand types are ‘std::_Rb_tree_iterator<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> > >’ and ‘int’)
    for (auto innerIterator = outerIterator + 1; innerIterator != m.end(); ++innerIterator)
                                            ^

很显然,它不喜欢我尝试进入下一个条目的方式(我基于使用std::vector的工作示例进行了尝试)。是否可以只用std::map做我想做的事情,还是我需要重新考虑我的方法并选择其他存储数据的方式?

1 个答案:

答案 0 :(得分:2)

wwwroot不是随机访问的迭代器,因此没有std::map::iterator。您可以解决该问题:

operator+(int)