print¶
ソースコード¶
1#pragma once
2
3#include <iostream>
4#include <vector>
5#include <set>
6#include <unordered_set>
7#include <map>
8#include <unordered_map>
9using namespace std;
10
11// print
12
13// color
14static const string PRINT_RED = "\033[91m"; // 赤字
15static const string PRINT_GREEN = "\033[92m"; // 緑字
16static const string PRINT_BLUE = "\033[94m"; // 青字
17static const string PRINT_NONE = "\033[m"; // 色を元に戻す
18
19string to_red(const string s) {
20 return PRINT_RED + s + PRINT_NONE;
21}
22
23string to_green(const string s) {
24 return PRINT_GREEN + s + PRINT_NONE;
25}
26
27string to_blue(const string s) {
28 return PRINT_BLUE + s + PRINT_NONE;
29}
30
31string spacefill(const string s, const int f) {
32 int n = s.size();
33 string t;
34 for (int i = 0; i < f-n; ++i) t += " ";
35 t += s;
36 return t;
37}
38
39string zfill(const string s, const int f) {
40 int n = s.size();
41 string t;
42 for (int i = 0; i < f-n; ++i) t += "0";
43 t += s;
44 return t;
45}
46
47// pair<K, V>
48template <typename K, typename V>
49ostream& operator<<(ostream& os, const pair<K, V>& p) {
50 os << "(" << p.first << ", " << p.second << ")";
51 return os;
52}
53
54// tuple<T1, T2, T3>
55template<typename T1, typename T2, typename T3>
56ostream &operator<<(ostream &os, const tuple<T1, T2, T3> &t) {
57 os << "(" << get<0>(t) << ", " << get<1>(t) << ", " << get<2>(t) << ")";
58 return os;
59}
60
61// tuple<T1, T2, T3, T4>
62template<typename T1, typename T2, typename T3, typename T4>
63ostream &operator<<(ostream &os, const tuple<T1, T2, T3, T4> &t) {
64 os << "(" << get<0>(t) << ", " << get<1>(t) << ", " << get<2>(t) << ", " << get<3>(t) << ")";
65 return os;
66}
67
68// vector<T>
69template <typename T>
70ostream& operator<<(ostream& os, const vector<T>& a) {
71 int n = (int)a.size();
72 os << "[";
73 for (int i = 0; i < n-1; ++i) {
74 os << a[i] << ", ";
75 }
76 if (n > 0) {
77 os << a.back();
78 }
79 os << "]";
80 return os;
81}
82
83// vector<vector<T>>
84template <typename T>
85ostream& operator<<(ostream& os, const vector<vector<T>>& a) {
86 os << "[\n";
87 int h = (int)a.size();
88 for (int i = 0; i < h; ++i) {
89 os << " " << a[i] << '\n';
90 }
91 os << "]";
92 return os;
93}
94
95// set<T>
96template <typename T>
97ostream& operator<<(ostream& os, const set<T>& s) {
98 os << "{";
99 auto it = s.begin();
100 while (it != s.end()) {
101 os << *it;
102 ++it;
103 if (it != s.end()) {
104 os << ", ";
105 }
106 }
107 os << "}";
108 return os;
109}
110
111// unordered_set<T>
112template <typename T>
113ostream& operator<<(ostream& os, const unordered_set<T>& a) {
114 set<T> s;
115 for (const T &x : a) {
116 s.insert(x);
117 }
118 os << s;
119 return os;
120}
121
122// map<K, V>
123template <typename K, typename V>
124ostream& operator<<(ostream& os, const map<K, V>& mp) {
125 os << "{";
126 auto it = mp.begin();
127 while (it != mp.end()) {
128 os << it->first << ": " << it->second;
129 ++it;
130 if (it != mp.end()) {
131 os << ", ";
132 }
133 }
134 os << "}";
135 return os;
136}
137
138// unordered_map<K, V>
139template <typename K, typename V>
140ostream& operator<<(ostream& os, const unordered_map<K, V>& mp) {
141 map<K, V> m;
142 for (const auto &[k, v] : mp) {
143 m[k] = v;
144 }
145 os << m;
146 return os;
147}
仕様¶
Warning
doxygenfile: Cannot find file “titan_cpplib/others/print.cpp