#ifndef LIMONP_STD_OUTBOUND_H #define LIMONP_STD_OUTBOUND_H #include #include #include namespace std { template ostream& operator << (ostream& os, const vector& vec) { if(vec.empty()) { return os << "[]"; } os<<"[\""< ostream& operator << (ostream& os, const pair& pr) { os << pr.first << ":" << pr.second ; return os; } template string& operator << (string& str, const T& obj) { stringstream ss; ss << obj; // call ostream& operator << (ostream& os, return str = ss.str(); } template ostream& operator << (ostream& os, const map& mp) { if(mp.empty()) { os<<"{}"; return os; } os<<'{'; typename map::const_iterator it = mp.begin(); os<<*it; it++; while(it != mp.end()) { os<<", "<<*it; it++; } os<<'}'; return os; } template ostream& operator << (ostream& os, const std::tr1::unordered_map& mp) { if(mp.empty()) { return os << "{}"; } os<<'{'; typename std::tr1::unordered_map::const_iterator it = mp.begin(); os<<*it; it++; while(it != mp.end()) { os<<", "<<*it++; } return os<<'}'; } template ostream& operator << (ostream& os, const set& st) { if(st.empty()) { os << "{}"; return os; } os<<'{'; typename set::const_iterator it = st.begin(); os<<*it; it++; while(it != st.end()) { os<<", "<<*it; it++; } os<<'}'; return os; } } #endif