Znaci Hashing sa Mergesortom trebam implementirati unutar koda (vidi ispod), i to tako da da imam bazu u koju cu implementirati insert i search i onda da dodam i delete i sortiranje
#ifndef CONTAINER_H
#define CONTAINER_H
#include <iostream>
#include <string>
class Streamable {
virtual std::ostream& put( std::ostream& o ) const = 0;
friend std::ostream& operator<<( std::ostream& o, const Streamable& s );
public:
virtual ~Streamable( ) {};
};
inline std::ostream& operator<<( std::ostream& o, const Streamable& s ) { return s.put( o ); }
typedef unsigned long int ValueType;
class Key {
ValueType value;
Key( ValueType v ) : value( v ) {}
public:
Key() {}
~Key( ) {}
std::ostream& put( std::ostream& o ) const { return o << value; }
std::istream& get( std::istream& i ) { return i >> value; }
bool operator==( const Key& k ) const { return value == k.value; }
bool operator>( const Key& k ) const { return value > k.value; }
unsigned long ulongValue() const { return (unsigned long) value; }
unsigned long hashValue() const { return (unsigned long) value; }
friend class KeyFactory;
};
inline std::ostream& operator<<( std::ostream& o, const Key& s ) { return s.put( o ); }
inline std::istream& operator>>( std::istream& i, Key& s ) { return s.get( i ); }
class KeyFactory {
public:
static Key newKey( unsigned long v ) { return Key( v ); }
static Key newKey( ) { return Key( std::rand( ) ); }
static void srand( int i ) { std::srand( i ); }
};
class Container : public Streamable {
protected:
Container( ) { }
public:
enum Order { dontcare, ascending, descending };
class Functor;
class Exception;
virtual ~Container( ) { }
virtual void add( const Key& key ) { add( &key, 1 ); }
virtual void add( const Key keys[], size_t size ) = 0;
virtual void remove( const Key& key ) { remove( &key, 1 ); }
virtual void remove( const Key keys[], size_t size ) = 0;
virtual bool isMember( const Key& key ) const = 0;
virtual size_t size( ) const = 0;
virtual bool isEmpty( ) const { return size( ) == 0; }
virtual void foreach( const Functor& f, Order order = dontcare ) const = 0;
virtual Key minKey( ) const = 0;
virtual Key maxKey( ) const = 0;
virtual int teamNr( ) const = 0;
virtual int themeNr( ) const = 0;
};
class Container::Exception : public Streamable {
std::string msg;
virtual std::ostream& put( std::ostream& o ) const { return o << "Container::Exception (" << msg << ")"; }
public:
Exception( const std::string& msg ) : msg( msg ) {}
const std::string& getMsg() const { return msg; }
virtual ~Exception( ) {}
};
class Container::Functor {
public:
virtual bool operator( )( const Key& key ) const = 0;
virtual ~Functor( ) {}
};
#endif //CONTAINER_H