5#include <unordered_map>
7#include <unordered_set>
11std::ostream& operator<<(std::ostream& out,
const std::vector<T>& vec) {
17 for (
size_t i = 0; i < vec.size() - 1; i++) {
18 out << vec[i] <<
", ";
20 return out << vec.back() <<
']';
23template <
typename T1,
typename T2>
24std::ostream& operator<<(std::ostream& out,
const std::pair<T1, T2>& pair) {
25 return out <<
'(' << pair.first <<
", " << pair.second <<
')';
29std::ostream& operator<<(std::ostream& out,
const std::deque<T>& deq) {
35 for (
int i = 0; i < deq.size() - 1; i++) {
36 out << deq[i] <<
", ";
38 return out << deq.back() <<
']';
41template <
typename T1,
typename T2>
42std::ostream& operator<<(std::ostream& out,
const std::unordered_map<T1, T2>& map) {
44 for (
auto it = map.begin(); it != map.end(); it++) {
45 std::pair<T1, T2> element = *it;
46 out << element.first <<
": " << element.second;
47 if (std::next(it) != map.end()) {
54template <
typename T1,
typename T2>
55std::ostream& operator<<(std::ostream& out,
const std::map<T1, T2>& map) {
57 for (
auto it = map.begin(); it != map.end(); it++) {
58 std::pair<T1, T2> element = *it;
59 out << element.first <<
": " << element.second;
60 if (std::next(it) != map.end()) {
68std::ostream& operator<<(std::ostream& out,
const std::unordered_set<T>& set) {
70 for (
auto it = set.begin(); it != set.end(); it++) {
73 if (std::next(it) != set.end()) {
81std::ostream& operator<<(std::ostream& out,
const std::multiset<T>& set) {
83 for (
auto it = set.begin(); it != set.end(); it++) {
86 if (std::next(it) != set.end()) {
94std::ostream& operator<<(std::ostream& out,
const std::unordered_multiset<T>& set) {
96 for (
auto it = set.begin(); it != set.end(); it++) {
99 if (std::next(it) != set.end()) {
107std::ostream& operator<<(std::ostream& out,
const std::set<T>& set) {
109 for (
auto it = set.begin(); it != set.end(); it++) {
112 if (std::next(it) != set.end()) {
120template<
typename Type,
unsigned N,
unsigned Last>
122 static void print(std::ostream& out,
const Type& value) {
123 out << std::get<N>(value) <<
", ";
128template<
typename Type,
unsigned N>
130 static void print(std::ostream& out,
const Type& value) {
131 out << std::get<N>(value);
135template<
typename... Types>
136std::ostream& operator<<(std::ostream& out,
const std::tuple<Types...>& value) {
138 TuplePrinter<std::tuple<Types...>, 0,
sizeof...(Types) - 1>::print(out, value);
Definition stream.hpp:121