C++ “不可匹敌”;运营者–“;关于std::map的逆迭代器
我有一个C++ “不可匹敌”;运营者–“;关于std::map的逆迭代器,c++,c++11,stl,iterator,stdmap,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"
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;
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
std::map m;
m[“一”]=“一”;
m[“两个”]=“b”;
m[“三”]=“c”;
m[“四”]=“d”;
m[“五”]=“e”;
m[“六”]=“f”;
m[“七”]=“g”;
对于(自动outiterator=m.begin();outiterator!=m.end();++outiterator)
{
std::cout secondstd::map::iterator
不是随机访问的迭代器,因此它没有运算符+(int)
。您可以解决此问题:
for (auto outerIterator = m.begin(); outerIterator != m.end(); )
{
std::cout << outerIterator->second << std::endl;
for (auto innerIterator = ++outerIterator; innerIterator != m.end(); ++innerIterator)
{
std::cout << " > " << innerIterator->second << std::endl;
}
}
for(自动outiterator=m.begin();outiterator!=m.end();)
{
std::cout秒
for (auto outerIterator = m.begin(); outerIterator != m.end(); )
{
std::cout << outerIterator->second << std::endl;
for (auto innerIterator = ++outerIterator; innerIterator != m.end(); ++innerIterator)
{
std::cout << " > " << innerIterator->second << std::endl;
}
}