#ifndef __LIST_DICTIONARY_HPP #define __LIST_DICTIONARY_HPP #include "key_value_pair.hpp" #include "llist.hpp" #include "dictionary.hpp" template class ListDictionary : public Dictionary, LinkedList> { public: using KVP = KeyValuePair; using LinkedList::insertLast; using LinkedList::empty; using LinkedList::deleteFirst; using LinkedList::deleteAfter; using LinkedList::begin; using I = LinkedListIterator; // търсене на стойност по ключ V* lookup(K const& key) { for(KVP& kvp : *this) if (kvp == key) return &kvp.value; return nullptr; } V const* lookup(K const& key) const { for(KVP const& kvp : *this) if (kvp == key) return &kvp.value; return nullptr; } // свързване на ключ със стойност bool add(K const& key, V const& value) { if (lookup(key) != nullptr) return false; return insertLast(KVP(key, value)); } // изтриване на стойност, свързана с ключ bool remove(K const& key) { KVP temp; if (empty()) return false; I it = begin(); if (*it == key) { deleteFirst(temp); return true; } while(it.next() && it.next().get() != key) ++it; return deleteAfter(temp, it); } // списък от ключове LinkedList keys() const { LinkedList result; for(KVP const& kvp : *this) result.insertLast(kvp.key); return result; } // списък от стойности LinkedList values() const { LinkedList result; for(KVP const& kvp : *this) result.insertLast(kvp.value); return result; } }; #endif