Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+中迭代STL映射的子集+;_C++_Loops_Dictionary_Stl_Iterator - Fatal编程技术网

C++ 如何在C+中迭代STL映射的子集+;

C++ 如何在C+中迭代STL映射的子集+;,c++,loops,dictionary,stl,iterator,C++,Loops,Dictionary,Stl,Iterator,我不明白如何只对Stl映射的一部分进行迭代,而不是像标准遍历那样从头到尾进行迭代。这是我的密码: auto end = temp_map.rbegin() + THRESHOLD_NUM; for (auto rit = temp_map.rbegin(); rit != end; ++rit) { int s = rit->second; for (int k = 0; k < MAX_ROWS; k++)

我不明白如何只对Stl映射的一部分进行迭代,而不是像标准遍历那样从头到尾进行迭代。这是我的密码:

    auto end = temp_map.rbegin() + THRESHOLD_NUM;

    for (auto rit = temp_map.rbegin(); rit != end; ++rit)
    {
        int s = rit->second;

        for (int k = 0; k < MAX_ROWS; k++)
        {
            array_dist_it[k] = abs(input[k] - input_matrix[k][s]);
        }

        float av_real = mean(MAX_ROWS, array_dist_it);

        float score_real = score_func(av_real);

        rank_function(score_real, s);
    }
}
auto end=temp\u map.rbegin()+THRESHOLD\u NUM;
对于(auto rit=temp_map.rbegin();rit!=end;++rit)
{
int s=rit->second;
对于(int k=0;k

我认为问题与for循环的语法有关,特别是与迭代器有关。该错误与无效运算符有关。

A
std::map
有一个。它支持递增和递减,但不支持加法或减法。如果需要前进并迭代N次,则可以使用。用它来代替

auto end = temp_map.rbegin() + THRESHOLD_NUM;
你会的

auto end = std::next(temp_map.rbegin(), THRESHOLD_NUM);

这不是一个众包调试平台。你有没有考虑过这些可能性?你认为哪里不对?为了修复它,您尝试了什么?你认为还有什么其他方法可能有效?你尝过吗?您研究过哪些研究材料,为什么您认为其中推荐的方法不适合您的情况?堆栈溢出不是思想的替代品;至少,它不应该是“有什么不对劲”怎么了?对不起,如果我解释得不好,显然我已经尝试了我脑海中出现的所有可能性,错误当然与迭代器有关。我来这里不是为自己辩护,而是向你们寻求解决办法。显然,我在询问之前已经寻找过其他可能性。我不完全明白你的意思。如果对你来说,我的问题是无关紧要的,那么这是另一个问题。除非你提供准确的错误消息或显示问题的输出,否则我们看不出这“显然不起作用”。单击你自己的链接:
std::advance
has
void
返回类型。此外,tsk tsk回答非主题问题(尽管这一问题可能会被MCVE接受(如果不重要)。@LightnessRacesinOrbit我使用了错误的函数,我更正了答案,使用了
std::next
。就剩下的部分而言,
auto end=temp\u map.rbegin()+THRESHOLD\u NUM是一个错误。它的明显程度与此无关。我们试图在这里建立高质量的问答,而不是像FGITW那样胡乱猜测OP甚至没有写出错误消息的离题问题中出现的代码中的明显缺陷。这个问题一点也不可搜索,所以它对堆栈溢出不算“有用”。。。因此,不应通过猜测回答来鼓励感谢您修复建议的解决方案。