2009-03-14 5 views
2

En ce qui concerne cette question StackoVerflow 529831, ce fut l'un des approches proposéesComment ne imprimer une copie générique pour le type de clé et la carte

template<typename Map> typename Map::const_iterator 
greatest_less(Map const& m, typename Map::key_type const& k) { 
    //How to print K and Map m 
    typename Map::const_iterator it = m.lower_bound(k); 
    if(it != m.begin()) { 
     return --it; 
    } 
    return m.end(); 
} 

Je serais intéressé par l'impression clé K et carte m, Comment iriez à propos de ça.

Répondre

4

Utilisez l'opérateur <<, en vous assurant que << est défini pour vos deux Map::key_type et Map::data_type types (vous saurez si ce n'est pas le cas que le code ne compilera pas.)

cout << k << endl; 
for (typename Map::const_iterator it = m.begin(); it != m.end(); ++i) { 
    cout << it->first << " -> " << it->second << endl; 
} 

par exemple si votre Map::data_type est un struct fraction avec les membres float numerator et float denominator,

ostream& operator<<(ostream& os, const fraction& obj) { 
    return os << obj.numerator << '/' << obj.denominator; 
} 
+0

+1 pour laisser le compilateur vous dire si vous devez écrire opérateur <<. –

Questions connexes