如何打印包含整数和整数集的std::映射
How do I print std::maps that contains integers and sets of integers?
我有一个映射,它包含整数作为引用整数集的键。基本上我有一个std::map(int,std::set(int))。
我试图为映射定义一个迭代器,为集合定义一个,但当我试图将set_iterator指向映射中的特定集合时,我总是遇到错误。我在试图使两个迭代器相等的相等符号下得到了一条红线(没有运算符"="与这些操作数匹配)。我使用的是visualstudio c++2017,并且我不断收到构建错误。
/mykarger.cpp 的63-70行
map<int, std::set<int>>::iterator graph_it;
set<string>::const_iterator set_it, set_end;
std::cout << "VertixtEdgesn;";
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:usersalkamalisourcereposmykargermykargermykarger.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 studio2017communityvctoolsmsvc14.16.27023includextree(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 studio2017communityvctoolsmsvc14.16.27023includextree(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:usersalkamalisourcereposmykargermykargermykarger.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:usersalkamalisourcereposmykargermykargermykarger.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 studio2017communityvctoolsmsvc14.16.27023includextree(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 studio2017communityvctoolsmsvc14.16.27023includextree(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:usersalkamalisourcereposmykargermykargermykarger.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 ==========
错误消息是巨大的,提取相关信息可能需要一段时间,但归根结底是您试图将std::set<int>::iterator
分配给std::set<string>::iterator
。
你有
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 << " ";
}
}
相关文章:
- std::当在256字节边界上写入整数时,流的奇怪行为
- 什么是自动 t1=std::make_tuple(case1==case2,整数)的值
- 为什么初始化 std::vector 时不能使用模板整数?
- 如何检测 std::vector::emplace_back 上的隐式转换损失整数精度
- std::带有颜色和标题的 clog 包装器无法正确打印整数
- 从 std::string 转换为 const 无符号整数
- 为什么这个程序接受整数和字母数字输入并打印它们? C++ 中的 std::string 也采用整数值吗?
- 我想使用 std::stoi 函数在 cpp 中将字符串转换为整数,因为我想在字符串中找到不同数字的总和(在下级酶中)
- 如何在满足常量表达式的同时将整数传递给指针,传递给 std::array<double、integer>?
- 在 2D 整数矢量上使用 std::fill
- C++ - 重复 std::getline() 作为用户整数输入?
- 将 std::error_code 与整数进行比较
- std::reduce 似乎将结果转换为整数
- 将整数附加到 std::wstring 会给出错误
- 如何使用 C++ std 计算整数集合的前导零和尾随零
- 如何将带有前导零的整数插入到 std::string 中
- 如何使用 std::multimap 将整数键映射到两个用作多维数组坐标的整数值(对于井字)?
- 将 std::sort 与指向整数变量的指针一起使用会产生意外的输出
- 如何打印包含整数和整数集的std::映射
- C++:如何使 std::unique_ptr<int> 指向一个新整数?