The DejaVU Framework --
hush 3.1
-
[up]
[top] -
index
make
include
source
logic
grammar
scripts
html
configure
mx
slides
talks
scenes
reports
projects
<body bgcolor="#FFFFFF" text="#000000">
include
include
include
using namespace std;
// Any Hash Class must provide two methods: hash() and numBuckets().
template
<h4 align=right text=red> DefaultHash</h4><hr>
class DefaultHash
{
public:
// throws invalid_argument if numBuckets is non-positive
DefaultHash(int numBuckets = 101) throw (invalid_argument);
int hash(const T& key) const;
int numBuckets() const { return mNumBuckets; }
protected:
int mNumBuckets;
};<hr>
// Specialization for strings
template <>
<hr>>
.html> DefaultHash</h4>
class DefaultHash<string>
{
public:
// throws invalid_argument if numBuckets is non-positive
DefaultHash(int numBuckets = 101) throw (invalid_argument);
int hash(const string& key) const;
int numBuckets() const { return mNumBuckets; }
protected:
int mNumBuckets;
};
template <typename Key, typename T, typename Compare = std::equal_to<Key>,
typename Hash = DefaultHash<Key> >
hashmap</h4>
class hashmap
{
public:
typedef Key key_type;
typedef T mapped_type;
typedef pair value_type;
// Constructors
// throws invalid_argument if the hash object specifies a non-positive
// number of buckets.
explicit hashmap(const Compare& comp = Compare(),
const Hash& hash = Hash()) throw(invalid_argument);
// destructor, copy constructor, assignment operator
~hashmap();
hashmap(const hashmap& src);
hashmap& operator=(const hashmap<
Key, T, Compare, Hash>& rhs);
// element insert
// inserts the key/value pair x
void insert(const value_type& x);
// element delete
// removes the element with key x, if it exists
void erase(const key_type& x);
// element lookup
// find returns a pointer to the element with key x.
// Returns NULL if no element with that key exists.
value_type* find(const key_type& x);
// operator[] finds the element with key x or inserts an
// element with that key if none exists yet. Returns a reference to the
// value corresponding to that key.
T& operator[] (const key_type& x);
protected:
typename list >::iterator
findElement(const key_type& x, int& bucket) const;
typedef list ListType;
// In this first implementation, it would be easier to use a vector
// instead of a pointer to a vector, which requires dynamic allocation.
// However, we use a ptr to a vector so that, in the final
// implementation, swap() can be implemented in constant time.
vector* mElems;
int mSize;
Compare mComp;
Hash mHash;
};
include <hashmap.cpp>
(C) Æliens
20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2780434-1";
urchinTracker();
</script>