码迷,mamicode.com
首页 > 其他好文 > 详细

一个极简易 int 类型哈希表的实现

时间:2015-02-25 23:32:18      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:

看了算法导论的影印版的哈希表时,开始还不太明白, 想了下后觉得似乎哈希表就是数组和链表的组合, 于是根据这个思路实现了一个最简易的哈希表。

这个其实我还是不太满意, 可能在以后会更新, 因为我觉得不满足 DRY 原则。

class HashTable
{
private:
    const size_t             initSize = 13;
    const int32_t            hashNum  = 13;

    vector<list<int32_t>>    hashTable;

    int32_t Hash (const int32_t& key) const
    {
        return (key % hashNum);
    }

    list<int32_t>::const_iterator
        GetTargetIter (const int32_t& value) const
    {
        auto key = Hash (value);
        return find (hashTable[key].cbegin (),
                     hashTable[key].cend (),
                     value);
    }

public:
    explicit HashTable ()
    {
        hashTable.resize (initSize);
    }

    decltype(hashTable) GetHashTable () const
    {
        return hashTable;
    }

    HashTable& operator=(const HashTable& otherTable)
    {
        hashTable = otherTable.GetHashTable ();
        return *this;
    }

    void Insert (const int32_t& value)
    {
        if (GetTargetIter (value) ==
            hashTable[Hash (value)].cend ()) {
            hashTable[Hash (value)].push_back (value);
        }
        else {
            cerr << "Insert failed: The value already exists.\n";
        }
    }
void Delete (const int32_t& value) { auto targetIter = GetTargetIter (value); auto key = Hash (value); if (targetIter == hashTable[key].cend ()) { cout << "Cannot find " << value << " !\n"; } else { hashTable[key].erase (targetIter); cout << "The " << value << " has been deleted!\n"; } } void Search (const int32_t& value) const { if (GetTargetIter (value) == hashTable[Hash (value)].cend ()) { cout << "Cannot find "<< value << " !\n"; } else { cout << value << " is exist.\n"; } } void Show () const { cout << "The values in the hash table are:\n"; for_each (hashTable.cbegin (), hashTable.cend (), [] (const list<int32_t>& l) { if (!l.empty ()) { for (const auto& val : l) { cout << val << " "; } cout << endl; } }); } };

 

一个极简易 int 类型哈希表的实现

标签:

原文地址:http://www.cnblogs.com/wuOverflow/p/4300363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!