Значением ваших карт (std::map<int, std::vector<int>>
) является вектор int
с, и operator<<
не определено для печати std::vector<int>
в стандарте. Вам нужно пройтись по вектору (то есть значениям карты), чтобы напечатать элементы.
for (itr = int_vector.begin(); itr != int_vector.end(); ++itr)
// ^^ --> also you had a typo here: itr not itr2
{
cout << "\t " << itr->first << "\t";
for(const auto element: itr->second) std::cout << element << " ";
std::cout << '\n';
}
При этом, если у вас есть доступ к C ++ 11, вы можете использовать на основе диапазона для циклов . А в C ++ 17 вы могли бы сделать более интуитивно понятным структурированное связывание объявлений для значения ключа карты:
for (auto const& [key, Vec] : int_vector)
{
std::cout << "\t " << key << "\t"; // print key
for (const auto element : Vec) std::cout << element << " ";// print value
std::cout << '\n';
}
Примечание : Как указывалось в комментариях @ Jarod42 , данный код может быть упрощен, если записи известны заранее.
например с std::map::emplace
ing:
using ValueType = std::vector<int>;
std::map<int, ValueType> int_vector;
int_vector.emplace(1, ValueType{ 2, 5, 7 });
int_vector.emplace(2, ValueType{ 1, 3, 6 });
или просто инициализируйте карту, используя std::initializer_list
конструктор из std::map
.
const std::map<int, std::vector<int>> int_vector { {1, {2, 5, 7}}, {2, {1, 3, 6}} };