• 温故而知新--hashtable


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

    本例子中将会定义一个简单的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;
    }
    

  • 相关阅读:
    H5相关网址
    ASP.NET MVC Razor视图引擎攻略
    深度解析 ASP.NET MVC 5
    .Net MVC 框架基础知识
    java SDK服务端推送 --极光推送(JPush)
    Nexus Repository Manager OSS 3.x 安装配置
    java项目中使用ffmpeg剪辑部分视频
    net 异步与同步
    IDEA把spring-boot项目打包成jar
    开放api接口签名验证
  • 原文地址:https://www.cnblogs.com/newzol/p/6596341.html
Copyright © 2020-2023  润新知