C++ мультикарта с диапазоном для цикла, повторяющегося по 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 ответ
equal_range
возвращает pair
Вы не можете использовать его в range based for