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

本例子中将会定义一个简单的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. Duilib第一步(II)-Hello World

    My first Duilib program 1. Prepare for development 打开DuiFarm项目DuiFarm.cpp文件,将除_tWinMain函数之外所有内容删除.删除 ...

  2. 解决maven项目Cannot change version of project facet Dynamic web module to 3.0

    问题描述         用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp,由于这个catalog比较老,用的servl ...

  3. Git 版本退回commit

    有的时候错误提交了commit,需要版本退回. 先用git log查看一下节点版本号commit_id $ git log 再用git reset退回 $ git reset -soft commit ...

  4. linux HAProxy及Keepalived热备

    HAProxy 它是免费,快速且可靠的一种解决方案没,适用于那些负载特大的web站点这些站点通常又需要会话保持或七层处理提供高可用性,负载均衡及基于tcp和http应用的代理 衡量负载均衡器性能的因素 ...

  5. TI Davinci DM6446开发攻略——开发环境搭建

    TI DAVINCI DM6446的开发环境搭建不像三星S3C2410,S3C2440,ATMEL的AT91SAM9260之类的单核ARM那么简单,因为DM6446还有DSP端的开发环境,以及双核之间 ...

  6. ffmpeg入门之 Tutorial02

    02实际是在01的基础上添加了 SDL显示yuv部分,这部分相对独立. if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER))   ...

  7. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'L

    1.错误描述 [ERROR:]2015-06-08 09:49:42,523 [异常拦截] org.hibernate.exception.DataException: error executing ...

  8. 利用MD5加密字符串

    private static string MD5E(string temp) { MD5 md5 = new MD5CryptoServiceProvider(); byte[] source=Sy ...

  9. 获取MySql每一列的数据类型和长度默认值等信息

    如何获取MySql表中各个列的数据类型? show columns from tablename 返回结果如下: id    int(11)     NO  PRI         auto_incr ...

  10. html基础加强2

    1.表单元素 表单元素一定要提交在form标签里面 2.id和name 所有元素都有ID,但只有表单元素才有name ID不可以重复,name可以重复 name属性的目的时可以将数据提交到服务器.id ...