2015-03-02 60 views
0

我需要打印包含multimap的dequeu,但它不起作用,我做錯了什麼?print multique包含multimap

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> > > >]()’ 
+0

我說我正在編譯器錯誤。 – Merl 2015-03-02 14:22:27

+2

'std :: deque :: iterator'?爲什麼'int'?如果您的C++ 11編譯器考慮使用[基於範圍的for for循環代替](http://en.cppreference.com/w/cpp/language/range-for),或者最少的'const auto it = q_map.begin()' – 2015-03-02 14:24:44

+1

另外,當你修復上面的錯誤時,你會在你試圖打印一個'std :: multimap'對象時得到新的錯誤。 – 2015-03-02 14:30:24

回答

0

你有這樣的類型:

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

1

嘛,兩個簡單的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; 
+1

太棒了,如果我可以使用c + + 11,這將工作,但我不能更新編譯器。 – Merl 2015-03-02 17:56:16