/* * dictionary.h * * Created on: 8.01.2016 г. * Author: trifon */ #ifndef DICTIONARY_H_ #define DICTIONARY_H_ #include using namespace std; #include "linked_list.cpp" template class Dictionary { public: // адресиране по ключ // ht["Ivan"] = "Prodanov"; // ако "Ivan" го няма в таблицата, ще го създаде V& operator[](K const& key) { V* value = lookup(key); if (value != NULL) return *value; else { add(key, V()); return *lookup(key); } } // търсене virtual V* lookup(K const&) = 0; // вмъкване virtual bool add(K const&, V const&) = 0; // изтриване virtual bool remove(K const&) = 0; // списък от ключове virtual LinkedList keys() = 0; // списък от стойности virtual LinkedList values() = 0; virtual ~Dictionary() {} }; template class KeyValuePair : public pair { public: KeyValuePair(K const& key = K(), V const& value = V()) : pair(key, value) {} K& key() { return pair::first; } V& value() { return pair::second; } K const& key() const { return pair::first; } V const& value() const { return pair::second; } bool operator==(KeyValuePair const& kvp) const { return key() == kvp.key(); } bool operator!=(KeyValuePair const& kvp) const { return !(*this == kvp); } }; #endif /* DICTIONARY_H_ */