具有基于范围的C ++多图用于遍历equal_range的循环:错误消息

时间:2018-09-07 14:25:40

标签: c++ c++11 for-loop multimap equal-range

我试图使用基于范围的for循环遍历multimap的equal_range。我在模仿我看到的代码,但出现错误。

#include <iostream>
#include <map>

int main() {
    std::multimap<const unsigned long, const std::string> colors;

    colors.insert({2UL, "red"});
    colors.insert({2UL, "orange"});
    colors.insert({3UL, "yellow"});
    colors.insert({4UL, "green"});
    colors.insert({4UL, "blue"});
    colors.insert({5UL, "violet"});

    for (const auto &it : colors.equal_range(4UL)) {
        std::cout << "    " << it.second << std::endl;
    }
}

在编译时会发生以下情况:

g++ --version
g++ (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)

g++ 
$g++ -o foo foo.cc
foo.cc: In function ‘int main()’:
foo.cc:14:49: error: no matching function for call to 
‘begin(std::pair<std::_Rb_tree_iterator<std::pair<const long unsigned int, const std::__cxx11::basic_string<char> > >, std::_Rb_tree_iterator<std::pair<const long unsigned int, const std::__cxx11::basic_string<char> > > >&)’
 for (const auto &it : colors.equal_range(4UL)) {

我最后一次使用C ++是在C ++ 11之前。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

equal_range返回一个pair,您不能在range based for中使用它