【发布时间】:2018-12-20 21:40:37
【问题描述】:
我有一个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 来完成我想做的事情,或者我是否需要重新考虑我的方法并选择不同的方式来存储我的数据?
【问题讨论】:
标签: c++ c++11 stl iterator stdmap