Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string.h>
- template<class K, class V>
- class Map;
- template<class K, class V>
- class Element{
- public:
- friend class Map<K, V>;
- friend class Map<K, V>::Iterator;
- Element<K, V> *parent;
- Element<K, V> *right;
- Element<K, V> *left;
- K first;
- V second;
- Element<K, V>(){
- right=NULL;
- left=NULL;
- parent=NULL;
- }
- };
- template<class K, class V>
- class Map{
- public:
- Element<K,V> *root;
- Map<K,V>(){
- root=NULL;
- }
- void Usun_poddrzewo(Element<K,V> *small_tree_root){
- if (small_tree_root!=NULL){
- Usun_poddrzewo(small_tree_root->right);
- Usun_poddrzewo(small_tree_root->left);
- delete small_tree_root;
- }
- }
- ~Map(){
- Usun_poddrzewo(root);
- root=NULL;
- }
- V & operator [](const K &key){
- Element<K, V> *jumper = root, *newElement, *jumperParent = NULL;
- while(jumper){
- if (key == jumper->first) return jumper->second;
- else if (key < jumper -> first){
- jumperParent = jumper;
- jumper = jumper -> left;
- }
- else{
- jumperParent = jumper;
- jumper = jumper -> right;
- }
- }
- newElement = new Element<K,V>;
- newElement -> first = key;
- newElement -> left = NULL;
- newElement -> right = NULL;
- if (!root){
- root=newElement;
- newElement -> parent = NULL;
- }
- else{
- newElement -> parent = jumperParent;
- if (key < jumperParent -> first) jumperParent -> left = newElement;
- else jumperParent -> right = newElement;
- }
- return newElement -> second;
- }
- class Iterator{
- public:
- Element <K,V> *ws;
- Iterator(){
- ws=NULL;
- }
- int operator !=(const Iterator &o1){
- if(ws!=o1.ws) return 1;
- return 0;
- }
- Iterator operator ++(int){
- if (ws -> right){
- ws = ws -> right;
- while(ws -> left) ws = ws->left;
- return *this;
- }
- Element<K,V> *jumper = ws->parent;
- while (jumper != NULL && ws == jumper->right){
- ws=jumper;
- jumper = jumper -> parent;
- }
- ws = jumper;
- return *this;
- }
- Element<K,V> * operator ->(void){
- return ws;
- }
- };
- Iterator begin(void){
- Iterator i1;
- i1.ws=root;
- while (i1.ws -> left !=NULL) i1.ws = i1.ws->left;
- return i1;
- }
- Iterator end(void){
- Iterator i1;
- i1.ws=NULL;
- return i1;
- }
- };
- int main() {
- Map<int, std::string> o1;
- o1[4] = "ten tekst bedzie podmieniony wiecc sie nie wyswietli";
- o1[531] = "losowy tekst 0";
- o1[21] = "losowy tekst 1";
- o1[0] = "losowy tekst 2";
- o1[-7] = "losowy tekst 3";
- o1[-3] = "losowy tekst 4";
- o1[69] = "losowy tekst 5";
- o1[112] = "losowy tekst 6";
- o1[81] = "losowy tekst 7";
- o1[9] = "losowy tekst 8";
- o1[7] = "losowy tekst 9";
- o1[13] = "losowy tekst 10";
- o1[4] = "podmienione w[4]";
- for(Map<int,std::string>::Iterator i = o1.begin(); i!= o1.end(); i++) {
- std::cout << i->first << " " << i->second << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement