gpt4 book ai didi

c++ - std::map 的 reverse_iterator 上的 "operator-"不匹配

转载 作者:行者123 更新时间:2023-11-30 03:22:13 26 4
gpt4 key购买 nike

我有一个 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 来完成我想做的事情,或者我是否需要重新考虑我的方法并选择不同的方法来存储我的数据?

最佳答案

std::map::iterator 不是随机访问的迭代器,因此它没有 operator+(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;
}
}

关于c++ - std::map 的 reverse_iterator 上的 "operator-"不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51309339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com