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

How to iterate on a subset of an STL Map in C++

本文关键字:STL 映射 子集 迭代 C++      更新时间:2023-10-16

我不明白如何只在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);
    }
}

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

std::map有一个双向迭代器。它支持递增和递减,但不支持加法或减法。如果您需要前进和迭代器N次,那么您可以使用std::next。用它代替

auto end = temp_map.rbegin() + THRESHOLD_NUM;

你会有

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