我有一个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
做我想做的事情,还是我需要重新考虑我的方法并选择其他存储数据的方式?
答案 0 :(得分:2)
wwwroot
不是随机访问的迭代器,因此没有std::map::iterator
。您可以解决该问题:
operator+(int)