#include #include #include #include #include using namespace std; using fraction = pair; ostream& operator<<(ostream&, const fraction&); ostream& operator<<(ostream&, const pair&); ostream& operator<<(ostream&, const multimap&); int main() { multimap fractions; // insert 7 elements into the multimap 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{1,2}; pair temp_double_fraction; temp_double_fraction = {.5,temp_fraction}; fractions.insert(temp_double_fraction); fractions.insert({.5,{2,4}}); fractions.insert({.333,{1,3}}); fractions.insert({.25,{1,4}}); fractions.insert({.5,{1,2}}); cout << fractions << endl << endl; // fractions[.4] = fraction(2,5); // Error: no index operator multimap::const_iterator cIt; cIt = fractions.find(.333); cout << "fractions.find(.333): " << *cIt << endl; cout << "fractions.find(.75): " <<*fractions.find(.75) << endl; cIt = fractions.find(.55); cout << "fractions.find(.55): " <<*cIt << endl; if (cIt == fractions.end()) cout << "Can't find .55" << endl << endl; cout << "fractions.count(.5)=" << fractions.count(.5) << endl; cout << "fractions.count(.6)=" << fractions.count(.6) << endl << endl; cout << "Elements with key = .5" << endl; for (cIt = fractions.lower_bound(.5); cIt != fractions.upper_bound(.5); ++cIt) cout << *cIt << endl; } ostream& operator<<(ostream& out, const fraction& obj) { out << obj.first << '/' << obj.second; return out; } ostream& operator<<(ostream& out, const pair& obj) { out << "first: " << obj.first << " second: " << obj.second; return out; } ostream& operator<<(ostream& out, const multimap& obj) { for (auto it = obj.cbegin(); it != obj.cend(); ++it) out << "key: " << it->first << " value: " << it->second << endl; return out; }