#include #include #include #include #include using namespace std; using Fraction = pair; ostream& operator<<(ostream& out, const Fraction& f) { out << f.first << '/' << f.second; return out; } //function templates template ostream& operator<<(ostream& out, const pair& p) { out << "first: " << p.first << " second: " << p.second; return out; } template ostream& operator<<(ostream& out, const unordered_multimap& m) { for (auto element : m) out << element << endl; return out; } int main() { unordered_multimap fractions; fractions.insert(pair(.75,Fraction(3,4))); fractions.insert(pair(.75,Fraction{6,8})); Fraction neg_3_4{-3,-4}; fractions.insert(pair(.75,neg_3_4)); Fraction temp_fraction; pair temp_doub_fraction; temp_fraction = {1,2}; temp_doub_fraction = {.5,temp_fraction}; fractions.insert(temp_doub_fraction); fractions.insert({.5,{2,4}}); fractions.insert({.33,{1,3}}); fractions.insert({.25,{1,4}}); fractions.insert({.5,{1,2}}); cout << fractions << endl; // fractions[.4] = fraction(2,5); // Error: no index operator // find unordered_multimap::const_iterator cIt; cout << "fractions.find(.33): "; cIt = fractions.find(.33); cout << *cIt << endl; cout << "fractions.find(.75): " << *fractions.find(.75) << endl; cout << "fractions.find(.55): "; cIt = fractions.find(.55); // check to make sure find is OK if (cIt == fractions.end()) cout << "Can't find .55" << endl << endl; // count cout << "fractions.count(.5)=" << fractions.count(.5) << endl; cout << "fractions.count(.6)=" << fractions.count(.6) << endl << endl; // equal_range cout << "equal range(.5): " << endl; auto iters = fractions.equal_range(.5); cout << *(iters.first) << " / " << *(iters.second) << endl; for (auto iter = iters.first; iter != iters.second; ++iter) cout << *iter << endl; cout << endl; // erase cout << "fractions.erase(.33) = " << fractions.erase(.33) << endl; cout << "fractions.erase(.5) = " << fractions.erase(.5) << endl; cout << "fractions.erase(.55) = " << fractions.erase(.55) << endl << endl; cout << fractions << endl; }