打印包含 multimap 的双端队列
print deque containing multimap
我需要打印一个包含多图的 dequeu,但它不起作用,我做错了什么?
int main()
{
deque<multimap<string,int> > q_map;
multimap<string,int> m;
m.insert(pair<string, int>("a", 1));
m.insert(pair<string, int>("c", 2));
m.insert(pair<string, int>("b", 3));
m.insert(pair<string, int>("b", 4));
m.insert(pair<string, int>("a", 5));
m.insert(pair<string, int>("b", 6));
cout << "Map size: " << m.size() << endl;
q_map.push_back(m);
for (std::deque<int>::iterator it = q_map.begin(); it!=q_map.end(); ++it)
std::cout << ' ' << *it;
}
我总是遇到编译器错误:
error: conversion from ‘std::_Deque_iterator<std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >, std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >&, std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >*>’ to non-scalar type ‘std::_Deque_iterator<int, int&, int*>’ requested
q_map.cpp:23: error: no match for ‘operator!=’ in ‘it != std::deque<_Tp, _Alloc>::end() [with _Tp = std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >, _Alloc = std::allocator<std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > > >]()’
嗯,两个简单的 for 循环,一个遍历 deque
,另一个遍历 multimap
:
for ( auto it = q_map.begin(); it != q_map.end(); ++it )
for ( auto it2 = (*it).begin(); it2 != (*it).end(); ++it2 )
cout << ' ' << it2->first << ' ' << it2->second << endl;
或使用范围循环
for ( auto& it : q_map )
for ( auto& it2 : it )
cout << ' ' << it2.first << ' ' << it2.second << endl;
你属于这种类型:
deque<multimap<string,int> > q_map;
但是您正在尝试使用此类型对其进行迭代:
for (std::deque<int>::iterator it = q_map.begin(); ...
那就是你做错了。
如果您不能使用 C++11 基于范围的 for
循环或 C++11 auto
功能,那么不要重复类型 multimap<string,int>
在任何地方,你都可以为它使用 typedef:
typedef multimap<string,int> mmap;
现在您可以在任何地方引用 std::deque<mmap>
,因此 for
循环将使用 std::deque<mmap>::iterator
我需要打印一个包含多图的 dequeu,但它不起作用,我做错了什么?
int main()
{
deque<multimap<string,int> > q_map;
multimap<string,int> m;
m.insert(pair<string, int>("a", 1));
m.insert(pair<string, int>("c", 2));
m.insert(pair<string, int>("b", 3));
m.insert(pair<string, int>("b", 4));
m.insert(pair<string, int>("a", 5));
m.insert(pair<string, int>("b", 6));
cout << "Map size: " << m.size() << endl;
q_map.push_back(m);
for (std::deque<int>::iterator it = q_map.begin(); it!=q_map.end(); ++it)
std::cout << ' ' << *it;
}
我总是遇到编译器错误:
error: conversion from ‘std::_Deque_iterator<std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >, std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >&, std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >*>’ to non-scalar type ‘std::_Deque_iterator<int, int&, int*>’ requested
q_map.cpp:23: error: no match for ‘operator!=’ in ‘it != std::deque<_Tp, _Alloc>::end() [with _Tp = std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >, _Alloc = std::allocator<std::multimap<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > > >]()’
嗯,两个简单的 for 循环,一个遍历 deque
,另一个遍历 multimap
:
for ( auto it = q_map.begin(); it != q_map.end(); ++it )
for ( auto it2 = (*it).begin(); it2 != (*it).end(); ++it2 )
cout << ' ' << it2->first << ' ' << it2->second << endl;
或使用范围循环
for ( auto& it : q_map )
for ( auto& it2 : it )
cout << ' ' << it2.first << ' ' << it2.second << endl;
你属于这种类型:
deque<multimap<string,int> > q_map;
但是您正在尝试使用此类型对其进行迭代:
for (std::deque<int>::iterator it = q_map.begin(); ...
那就是你做错了。
如果您不能使用 C++11 基于范围的 for
循环或 C++11 auto
功能,那么不要重复类型 multimap<string,int>
在任何地方,你都可以为它使用 typedef:
typedef multimap<string,int> mmap;
现在您可以在任何地方引用 std::deque<mmap>
,因此 for
循环将使用 std::deque<mmap>::iterator