@@ -34,6 +34,8 @@ class HashTable{
3434 size_t bucket (const Key& key) const ;
3535 private:
3636 size_t _next_prime (const size_t n) const ;
37+ size_t _bucket_num (const Key& key, size_t n);
38+ size_t _hash (const Key& key);
3739 private:
3840 struct _KVNode {
3941 Key _key;
@@ -47,6 +49,31 @@ class HashTable{
4749template <typename Key, typename Value>
4850HashTable<Key, Value>::HashTable() : _buckets(*(_prime_list)), _size(0 ) {}
4951
52+ // Elements access
53+ template <typename Key, typename Value>
54+ Value& HashTable<Key, Value>::at(const Key &key){
55+
56+ }
57+
58+ // Buckets
59+ template <typename Key, typename Value>
60+ size_t HashTable<Key, Value>::buckets_count() const {
61+ return _buckets.size ();
62+ }
63+
64+ template <typename Key, typename Value>
65+ size_t HashTable<Key, Value>::max_buckets_count() const {
66+ return *(_prime_list + _num_primes - 1 );
67+ }
68+
69+ template <typename Key, typename Value>
70+ size_t HashTable<Key, Value>::bucket_size(const size_t n) const {
71+ if (n >= _buckets.size ()){
72+ throw std::out_of_range (" HashTable::bucket_size(): Index out of range" );
73+ }
74+ return _buckets[n].size ();
75+ }
76+
5077// Private Functions
5178template <typename Key, typename Value>
5279size_t HashTable<Key, Value>::_next_prime(const size_t n) const {
@@ -61,4 +88,14 @@ size_t HashTable<Key, Value>::_next_prime(const size_t n) const{
6188 return pos == last ? *(last - 1 ) : *pos;
6289}
6390
64- #endif // HASHTABLE
91+ template <typename Key, typename Value>
92+ size_t HashTable<Key, Value>::_bucket_num(const Key &key, size_t n){
93+ return _hash (key) % n;
94+ }
95+
96+ template <typename Value>
97+ size_t HashTable<int , Value>::_hash(const int &key){
98+ return key;
99+ }
100+
101+ #endif // HASHTABLE_H
0 commit comments