#include <iostream>
#include <map>
#include <set>

struct pareja {
   int a, b;
};

bool operator<(pareja p1, pareja p2) {    // comparar primero a; en caso de empate, comparar b
   return (p1.a < p2.a || (p1.a == p2.a && p1.b < p2.b));
}

int main( ) {
   std::cout << "ejemplo de set:\n";
   std::set<pareja> conjunto;
   conjunto.insert({ 5, 7 });
   conjunto.insert({ 3, 9 });
   conjunto.insert({ 5, 7 });
   conjunto.insert({ 8, 2 });
   std::cout << conjunto.size( ) << "\n";
   for (pareja p : conjunto) {
      std::cout << "{ " << p.a << ", " << p.b << " } ";
   }
   std::cout << "\n";

   std::cout << "---------\n";

   std::cout << "ejemplo de map:\n";
   std::map<pareja, int> mapa;
   mapa[{ 1, 2 }] = 3;
   mapa[{ 4, 5 }] = 6;
   pareja p = { 1, 2 };
   std::cout << mapa[p] << "\n";
}
