哈希在实际使用中主要是当作私有内存,对数据进行插入和查找,哈希数据元素越多,操作的时候消耗的性能就越到,最明显的是当数据元素达到哈希的容量大小时,插入数据冲突概率会变大,并慢慢的退化为数组。

本例子中将会定义一个简单的hashtable。示例如下:
#include <iostream>
#include <list>
#include <string>
using namespace std;
class CHashTable{
public:
typedef list<int>::iterator ListIter;
private:
list<int> m_Container[3];//三个链表
int HashFunction(const int& v) const;
int m_Count;
public:
CHashTable();
~CHashTable();
void Insert(const int& v);
bool Find(const int& v);
bool Delete(const int& v);
int Count() const;
};
CHashTable::CHashTable(){
m_Count = 0;
}
CHashTable::~CHashTable(){
m_Count = 0;
for(int i=0;i<3;i++){
m_Container[i].clear();
}
}
//哈希计算方法
int CHashTable::HashFunction(const int &v) const{
return v%3;
}
//插入元素
void CHashTable::Insert(const int &v){
m_Container[HashFunction(v)].push_back(v);
m_Count++;
}
//查找元素
bool CHashTable::Find(const int &v){
int iResKey = HashFunction(v);
for(ListIter it = m_Container[iResKey].begin();it != m_Container[iResKey].end();it++){
if(v == *it){
return true;
}
}
return false;
}
bool CHashTable::Delete(const int& v){
int iResKey = HashFunction(v);
for(ListIter it = m_Container[iResKey].begin();it != m_Container[iResKey].end();it++){
if(v == *it){
m_Container[iResKey].erase(it);
m_Count --;
return true;
}
}
return false;
}
int CHashTable::Count() const{
return m_Count;
}
int main(int argc, char *argv[]) {
CHashTable myhash;
//initialise the hash
for(int i=0;i<10;i++){A
myhash.Insert(i);
}
//return the size of hash
std::cout<<"myhash size is:"<<myhash.Count()<<endl; std::cout<<"find the element 5: ";
std::string strText = myhash.Find(5)? "yeah":"oh,no";
std::cout<<strText<<std::endl;
std::cout<<"del the element 5: "<<std::endl;
myhash.Delete(5);
std::cout<<"afther del find the element 5: ";
strText = (myhash.Find(5)? "yeah":"oh,no");
std::cout<<strText<<std::endl;
std::cout<<"myhash size is:"<<myhash.Count()<<endl;
return 0;
}

温故而知新--hashtable的更多相关文章

  1. HashSet HashTable 与 TreeSet

    HashSet<T>类 HashSet<T>类主要是设计用来做高性能集运算的,例如对两个集合求交集.并集.差集等.集合中包含一组不重复出现且无特性顺序的元素. HashSet& ...

  2. Javascript实现HashTable类

    散列算法可以尽快在数据结构中找出指定的一个值,因为可以通过Hash算法求出值的所在位置,存储和插入的时候都按照Hash算法放到指定位置. <script> function HashTab ...

  3. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  4. java面试题——HashMap和Hashtable 的区别

    一.HashMap 和Hashtable 的区别 我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Clonea ...

  5. Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、

    特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣)                       ...

  6. HashTable初次体验

    用惯了数组.ArryList,初次接触到HashTable.Dictionary这种字典储存对于我来说简直就是高大上. 1.到底什么是HashTable HashTable就是哈希表,和数组一样,是一 ...

  7. HashMap和 Hashtable的比较

    Hashtable 和 HashMap的比较 1.  HashMap可以接受null(HashMap可以接受为null的键值(key)和值(value), HashTable不可以接受为null的键( ...

  8. hashMap和hashTable的区别

    每日总结,每天进步一点点 hashMap和hashTable的区别 1.父类:hashMap=>AbstractMap hashTable=>Dictionary 2.性能:hashMap ...

  9. SortedList和HashTable

    都是集合类,C#中同属命名空间System.Collections,“用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写:value用于存储对应于key的 ...

随机推荐

  1. Centos下Sphinx中文分词编译安装测试---CoreSeek

    要支持中文分词,还需要下载Coreseek,可以去官方搜索下载,这里我用的4.1 百度云下载地址:      https://pan.baidu.com/s/1slNIyHf tar -zxvf co ...

  2. PAT1119. Pre- and Post-order Traversals

    思路:中序遍历–根结点,左子树,右子树:后序遍历–左子树,右子树,根结点. 那么在找到根结点之后就可以开始划分左右子树了.左子树的先序第一个节点是根,左子树的后序最后一个节点是根. 例如 1 2 3 ...

  3. gitlab启用https

    为了防止内网渗透,将gitlab服务的访问添加了ssl,具体步骤如下: 修改配置文件 [xieshuang@VM_177_101_centos gitlab]$ sudo vim /etc/gitla ...

  4. 搬砖的也能学Python----if - elif 语句

    引入:如果平时执行的过程超过两个分支,则使用if-elif语句 if-elif 语句结构 if 判断条件: 要执行的代码 elif 判断条件: 要执行的代码 -- else: 要执行的代码 判断条件: ...

  5. 微软Surface Book推送Windows 10新固件更新:增强系统和电池

    微软公司最近为Surface Book推出了新的Windows 10固件系统和驱动的更新,并且以MSI的文件格式上传到了微软的下载中心里面.此次更新的内容主要是改进了Surface Book的系统的稳 ...

  6. 关于VS2013调试IIS应用源代码时无法进入断点的问题总结

    调试无法进入断点 前言:今天再次遇到之前调试无法进入断点的问题,本来想不写呢觉得没什么只是又犯了同样的错误,但是我发现这个问题我分析起来还是挺费劲的,我仔细想了想原因, 是因为自己对之前的错误没有进行 ...

  7. JavaScript 使用闭包防止变量污染

    javaScript在多人协作时,如果定义过多的全局变量 有可能造成全局变量命名冲突,使用闭包来解决功能对变量的调用 将变量写到一个独立的空间里面 就是闭包里面 var name = "外部 ...

  8. Tomcat启动过程源码解读

    根据Tomcat源码来看一下Tomcat启动过程都做了什么 部分代码为主要流程代码,删去了try-catch以及一些校验逻辑,方便理解主流程 先来一张启动过程时序图,了解一下启动顺序 Tomcat启动 ...

  9. javascript学习笔记 --event事件

    事件源(按钮.窗口)->事件对象->事件处理程序 事件源可以是网页元素浏览器窗口事件处理程序一般是一个函数.       一个事件可以被多个函数处理       事件的总类       鼠 ...

  10. Invalid property 'driver_class' of bean class

    1.错误描述 INFO:2015-05-01 13:06:07[localhost-startStop-1] - Initializing c3p0-0.9.2.1 [built 20-March-2 ...