template <class key, class Elem, class keyCompare, class EECompare>
class Dictionary
{
public:
virtual void clear() = 0;
virtual bool insert(const Elem&) = 0;
virtual bool remove(const key&, Elem&) = 0;
virtual bool remove_any(Elem&) = 0;
virtual bool find(const key&, Elem&) = 0;
virtual int size() = 0;
}
class intCompare
{
static bool lt(int x, int y)
{
return x < y;
}
static bool gt(int x, int y)
{
return x > y;
}
static bool eq(int x, int y)
{
return x == y;
}
}
template <class key, class Elem, class keyCompare, class EECompare>
class unsorted_array_based:public Dictionary<key, Elem, keyCompare, EECompare>
{
private:
array_list<Elem>* list;
public:
unsorted_array_based(int size = defaultListSize)
{
list = new array_list<Elem>(size);
}
~unsorted_array_based()
{
delete list;
}
void clear()
{
list->clear();
}
bool insert(const Elem& item)
{
return list->append(item);
}
bool remove(const key& k, Elem& e)
{
for (list->setStart(); list->getValue(e); list->next())
if (keyCompare::eq(k,e))
{
list->remove(e);
return true;
}
return false;
}
bool remove_any(Elem& e)
{
if (size()== 0)
return false;
list->setEnd();
list->prev();
list->remove(e);
return true;
}
bool find(const key& k, Elem& e) const
{
for (list->setStart(); list->getValue(e); list->next())
if (keyCompare::eq(k,e))
return true;
return false;
}
int size()
{
return list->leftLength() + list->rigthLength();
}
}