#include <map.h>
#include <algo.h>
#include <iostream.h>
#include <function.h>

int SIZE;

#if 0
/* Crashes compiler */
#define int_less less<int>
#else
struct int_less {
  bool operator() (int x, int y) const { return x < y; }
};
struct str_less {
  bool operator() (char* x, char* y) const { return strcmp(x,y) < 0; }
};
#endif

#if 0
void add(int x[], int y[], map<int,int, int_less>& a)
{
  for (int i = 0; i < SIZE; ++i) a[x[i]] = y[i];
}
#endif

int
main(int argv, char** argc)
{
#if 0
  if (argv > 1)
  {
    SIZE = abs(atoi(argc[1]));
    SIZE &= ~1;
  }
  else
    SIZE = 100;
  nums = new int[SIZE];
  odds = new int[SIZE];
  perm = new int[SIZE];
#endif

  map<int, int, int_less> my_map;

  map<char*, int, str_less> phones;

  my_map[4] = 40;
  my_map[2] = 20;

  // The (char*) is needed because g++ doesn't
  // convert char[] to char* in this context.
  phones[(char*)"tom"] = 2345;
  phones[(char*)"dick"] = 5678;
  phones[(char*)"harry"] = 7654;

  cout << "2 -> " << my_map[2] << endl;
  cout << "4 -> " << my_map[4] << endl;

  map<int, int, int_less>::iterator it = my_map.begin();
  for ( ; it != my_map.end(); it++)
    cout << "my_map[" << (*it).first << "] = " << (*it).second << endl; 

  map<char*, int, str_less>::iterator pit = phones.begin();
  for ( ; pit != phones.end(); pit++)
    cout << "phones[" << (*pit).first << "] = " << (*pit).second << endl; 
}

template class __malloc_alloc_template<0>;
template class __default_alloc_template<false, 0>;
