src/work/bin_heap_demo.cc
author marci
Mon, 22 Mar 2004 15:53:05 +0000
changeset 232 cb87fb9d4c94
parent 172 c645f4a2a6ae
child 258 94bafec4f56f
permissions -rw-r--r--
.
     1 #include <iostream>
     2 #include <bin_heap.hh>
     3 #include <string>
     4 #include <map>
     5 
     6 using namespace hugo;
     7 using namespace std;
     8 
     9 class string_int_map;
    10 
    11 // Egy binaris kupac, ami stringekhez rendelt double ertekeket tarol,
    12 // azaz mindig az a string van a tetejen, amihez a legkisebb szam tartozik.
    13 // A kupac egy string_int_map tipusu property_map segitsegevel tarolja
    14 // a stringek aktualis helyet sajatmagan belul.
    15 // Egy olyan stringhez, ami meg nincsen a kupac -1 -et kell rendelnunk.
    16 typedef BinHeap<string, double, string_int_map> StrDoubleHeap;
    17 
    18 class string_int_map : public map<string,int> {
    19   typedef map<string,int> parent;
    20 public:
    21   int get(const string &s) {
    22     // Bocs, ez igy gaaaany, de nem volt kedvem utananezni, hogy
    23     // hogy is mukodik ez a map :)
    24     if( count(s) == 0 ) {
    25       parent::operator[](s) = StrDoubleHeap::PRE_HEAP;
    26     }
    27     return parent::operator[](s);
    28   }
    29   int operator[](const string &s) {
    30     return get(s);
    31   }
    32   void set(const string &s, int i) {
    33       parent::operator[](s) = i;
    34   }
    35 };
    36 
    37 
    38 int main()
    39 {
    40   string_int_map sim;
    41   
    42   
    43   cout << "testing string_int_map default value:\n";
    44   cout << "  sim.get(\"alma\"): " << sim.get("alma") << endl;
    45   cout << "  sim[\"alma\"]: " << sim["alma"] << endl;
    46 
    47   cout << "creating the heap\n";
    48   StrDoubleHeap heap(sim);
    49 
    50   cout << "heap.push(\"alma\", 15);\n";
    51   heap.push("alma", 15);
    52 
    53   cout << "heap.set(\"korte\", 3.4);\n";
    54   heap.set("korte", 3.4);
    55 
    56   cout << "heap.get(\"alma\") = " 
    57        << heap.get("alma")
    58        << endl;
    59   cout << "heap[\"alma\"] = " 
    60        << heap["alma"]
    61        << endl;
    62 
    63   cout << "heap.top() = "
    64        << heap.top() << endl;
    65   cout << "heap.topPrio() = "
    66        << heap.topPrio() << endl;
    67 
    68   cout << "heap.decrease(\"alma\", 1.2);\n";
    69   heap.set("alma", 1.2);
    70 
    71   cout << "heap.top() = "
    72        << heap.top() << endl;
    73   cout << "heap.topPrio() = "
    74        << heap.topPrio() << endl;
    75 
    76   cout << "heap.set(\"alma\", 22);\n";
    77   heap.set("alma", 22);
    78 
    79   cout << "heap.top() = "
    80        << heap.top() << endl;
    81   cout << "heap.topPrio() = "
    82        << heap.topPrio() << endl;
    83 
    84   cout << "heap.size() = "
    85        << heap.size() << endl;
    86   cout << "heap.pop();\n";
    87   heap.pop();
    88 
    89   cout << "heap.top() = "
    90        << heap.top() << endl;
    91   cout << "heap.topPrio() = "
    92        << heap.topPrio() << endl;
    93 
    94   cout << "heap.state(\"szilva\") = "
    95        << heap.state("szilva") << endl;
    96   cout << "heap.set(\"szilva\", 0.5);\n";
    97   heap.set("szilva", 0.5);
    98   cout << "heap.state(\"szilva\") = "
    99        << heap.state("szilva") << endl;
   100   cout << "heap.top() = "
   101        << heap.top() << endl;
   102   cout << "heap.pop();\n";
   103   heap.pop();
   104   cout << "heap.state(\"szilva\") = "
   105        << heap.state("szilva") << endl;
   106 
   107   cout << "heap.size() = "
   108        << heap.size() << endl;
   109   cout << "heap.pop();\n";
   110   heap.pop();
   111 
   112   cout << "heap.size() = "
   113        << heap.size() << endl;  
   114   cout << "heap.empty() = "
   115        << (heap.empty()?"true":"false") << endl;  
   116 }