#include // for right, setw #include #include #include using namespace std; template class BarGraph { public: void operator+=(const T &datum) { data[datum]++; } void dump() const { for (const auto &val : data) cout << right << setw(10) << val.first << ' ' << string(val.second, '*') << '\n'; cout << '\n'; } private: map data; }; template <> class BarGraph { unsigned false_count = 0, true_count = 0; public: void operator+=(bool datum) { datum ? true_count++ : false_count++; } void dump() const { cout << " false " << string(false_count, '*') << "\n" " true " << string(true_count, '*') << "\n\n"; } }; int main() { BarGraph alpha; alpha += 12; alpha += 6; alpha += 4; alpha += 6; alpha.dump(); BarGraph beta; beta += 3.14; beta += 2.71828; beta += 6.023e23; beta += 2.71828; beta.dump(); BarGraph gamma; gamma += false; gamma += true; gamma += false; gamma += true; gamma += true; gamma.dump(); BarGraph delta; delta += 'G'; delta += 'e'; delta += 'o'; delta += 'f'; delta += 'f'; delta.dump(); return 0; }