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