2016-12-17 8 views
1

я перегружен моей operator<< как:C++ возможно перегрузить `operator <<` для отображения карты?

friend ostream& operator<<(ostream& os, Data& e) 
{ 
    // possible code for printing map.. 
    return os; 
} 

И у меня есть map<string, vector<int>> table, мой вопрос, можно ли получить доступ и распечатать карту с помощью e.table?

+1

Чтобы ответить на поставленный вопрос: да, это возможно. –

+0

@SamVarshavchik Привет, хорошо. Вам нужно иметь 'operator <<' перегрузку для 'pair >', чтобы напечатать это? Потому что это дает мне ошибку 'ostream_iterator >> oi (cout," "); copy (e.table.begin(), e.table.end(), oi); ' – user3941584

ответ

1

Да, вы можете. Например.

#include <iostream> 
#include <map> 
#include <string> 
#include <vector> 

std::ostream & operator <<(std::ostream &os, 
          const std::map<std::string, std::vector<int>> &m) 
{ 
    for (const auto &p : m) 
    { 
     os << p.first << ": "; 
     for (int x : p.second) os << x << ' '; 
     os << std::endl; 
    } 

    return os; 
} 

int main() 
{ 
    std::map<std::string, std::vector<int>> m = 
    { 
     { "A", { 1, 2, 3, 4, 5 } }, 
     { "Z", { 5, 4, 3, 2, 1 } } 
    }; 

    std::cout << m << std::endl; 
} 

Выход программы

A: 1 2 3 4 5 
Z: 5 4 3 2 1 

Или

#include <iostream> 
#include <map> 
#include <string> 
#include <vector> 

class Data 
{ 
public: 
    friend std::ostream & operator <<(std::ostream &os, const Data &d); 

private: 
    std::map<std::string, std::vector<int>> m = 
    { 
     { "A",{ 1, 2, 3, 4, 5 } }, 
     { "Z",{ 5, 4, 3, 2, 1 } } 
    }; 
}; 

std::ostream & operator <<(std::ostream &os, const std::map<std::string, std::vector<int>> &m) 
{ 
    for (const auto &p : m) 
    { 
     os << p.first << ": "; 
     for (int x : p.second) os << x << ' '; 
     os << std::endl; 
    } 

    return os; 
} 

std::ostream & operator <<(std::ostream &os, const Data &d) 
{ 
    return os << d.m; 
} 

int main() 
{ 
    Data d; 
    std::cout << d << std::endl; 
} 
+0

Привет, спасибо, что ответили. Второй аргумент 'operator <<' '' является 'map', мой -' Data & e'. Можно ли распечатать через 'e.table'? – user3941584

+0

Потому что в моем 'main()' он не объявлен как 'map > m', как вы. Это просто 'cout << m << endl;' – user3941584

+0

@ user3941584 Нет проблем. Просто выведите e.table. –