order.c
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:1k
开发平台:

MultiPlatform

  1. // This programs is using dictionaries with keys of type "point" with two 
  2. // different linear orders, the lexicographic ordering on the cartesian 
  3. // coordinates (default ordering) and the lexicographic ordering on the
  4. // polar coordinates.
  5. // must be linked with   libP.a libG.a libL.a -lm   !!!
  6. #include <LEDA/dictionary.h>
  7. #include <LEDA/plane.h>
  8. int pol_cmp(point x, point y) 
  9. {
  10.   // defines lexicographic order of the polar coordinates
  11.   
  12.   point origin(0,0);
  13.   segment sx(origin,x), sy(origin,y);
  14.   int c = compare(sx.angle(), sy.angle());  // predefined compare(double,double)
  15.   if (c) return c;
  16.   return compare(sx.length(),sy.length()); 
  17.   
  18.  }
  19. DEFINE_LINEAR_ORDER(point,pol_cmp,point_pol)
  20. // Now "point_pol" is equivalent to the data type  point
  21. // with the linear order defined by "pol_cmp".
  22. main()
  23. {
  24.   dictionary<point,int>      D;
  25.   dictionary<point_pol,int>  D_pol;
  26.   point x;
  27.   while (cin >> x) 
  28.   { D.insert(x,0);
  29.     D_pol.insert(x,0);
  30.    }
  31.   dic_item it;
  32.   forall_items(it,D) cout << D.key(it)  << "n";
  33.   newline;
  34.   forall_items(it,D_pol) cout << D_pol.key(it)  << "n";
  35.   newline;
  36. }