Как напечатать std :: maps, который содержит целые числа и наборы целых чисел? - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть эта карта, которая содержит целые числа в качестве ключей, которые относятся к наборам целых чисел.В основном у меня есть std :: map (int, std :: set (int)).

Я попытался определить итератор для карты и один для набора, но при попытке вывести ошибкууказать set_iterator на конкретный набор на карте.Я получаю красную линию под символами равенства, которые пытаются уравнять оба итератора (ни один оператор "=" не соответствует этим операндам).Я использую Visual Studio C ++ 2017 и продолжаю получать ошибки сборки.

строки 63-70 из /mykarger.cpp

map<int, std::set<int>>::iterator graph_it;
set<string>::const_iterator set_it, set_end;
std::cout << "Vertix\tEdges\n;";
for(graph_it = mygraph.begin(); graph_it != mygraph.end(); ++graph_it) {
    std::cout << graph_it->first << ":\t";
    for(set_it = graph_it->second.begin();; set_it != graph_it->second.end(); ++set_it){
        cout << *set_it << "\t";

}

Я ожидаю результатовнапечатать так:

    Vertex       Edges
    1:           2      3
    2:           1      3
    3:           1      2

Но я получаю ошибку:

    1>------ Build started: Project: mykarger, Configuration: Debug Win32 ------
    1>mykarger.cpp
    1>c:\users\alkamali\source\repos\mykarger\mykarger\mykarger.cpp(68): error C2679: binary '=': no operator found which takes a right-hand operand of type 'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> *' (or there is no acceptable conversion)
    1>        with
    1>        [
    1>            _Ty=int
    1>        ]
    1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\xtree(303): note: could be 'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> &std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>::operator =(std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> &&)'
    1>        with
    1>        [
    1>            _Ty=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
    1>        ]
    1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\xtree(303): note: or       'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> &std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>::operator =(const std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> &)'
    1>        with
    1>        [
    1>            _Ty=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
    1>        ]
    1>c:\users\alkamali\source\repos\mykarger\mykarger\mykarger.cpp(68): note: while trying to match the argument list '(std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>, std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> *)'
    1>        with
    1>        [
    1>            _Ty=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
    1>        ]
    1>        and
    1>        [
    1>            _Ty=int
    1>        ]
    1>c:\users\alkamali\source\repos\mykarger\mykarger\mykarger.cpp(69): error C2679: binary '=': no operator found which takes a right-hand operand of type 'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> *' (or there is no acceptable conversion)
    1>        with
    1>        [
    1>            _Ty=int
    1>        ]
    1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\xtree(303): note: could be 'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> &std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>::operator =(std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> &&)'
    1>        with
    1>        [
    1>            _Ty=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
    1>        ]
    1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\xtree(303): note: or       'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> &std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>::operator =(const std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> &)'
    1>        with
    1>        [
    1>            _Ty=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
    1>        ]
    1>c:\users\alkamali\source\repos\mykarger\mykarger\mykarger.cpp(69): note: while trying to match the argument list '(std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>, std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> *)'
    1>        with
    1>        [
    1>            _Ty=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
    1>        ]
    1>        and
    1>        [
    1>            _Ty=int
    1>        ]
    1>Done building project "mykarger.vcxproj" -- FAILED.
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

1 Ответ

0 голосов
/ 02 февраля 2019

Сообщение об ошибке является массовым, и для извлечения соответствующей информации может потребоваться некоторое время, но оно сводится к тому, что вы пытаетесь назначить std::set<int>::iterator для std::set<string>::iterator.

Youиметь

map<int, std::set<int>>::iterator graph_it;
                  ^^^

, но

set<string>::const_iterator set_it, set_end;
    ^^^^^^

Более современная формулировка того же цикла позволяет избежать многих потенциальных проблем:

for(const auto& vertex: my_graph) {
    std::cout << vertex.first << ":\t";
    for (const auto& edge: vertex.second)
    {
        std::cout << edge << " ";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...