c++ stl 哈希表(未完成)
来源:互联网 发布:淘宝客如何骗取佣金 编辑:程序博客网 时间:2024/04/27 21:39
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <list>
using namespace std;
int hash(const string& str , int hashTableSize)
{
int hasVal = 0;
for ( int i =0 ;i < str.size() ;i++)
{
hasVal += str[i];
}
return hasVal%hashTableSize;
}
int hash (int keys)
{
return keys;
}
class Employee
{
public:
const string & getName() {return name;}
bool operator == (const Employee& rhs)const
{
return getName() == rhs.getName();
}
bool operator != (const Employee& rhs)const
{
return !(*this == rhs);
}
private:
string name;
double salary;
int seniority;
};
int hash(const Employee& item)
{
return hash(item.getName());
}
template <typename HashedObj>
class HashTable
{
public:
explicit HashTable(int size = 101);
bool contains(const HashedObj & x)const;
void makeEmpty();
void insert(const HashedObj & x);
void remove(const HashedObj & x);
private:
vector<list<HashedObj> > theLists;
int currentSize;
void rehash();
int myhash(const HashedObj & x)const;
};
void HashTable::makeEmpty()
{
for ( int i =0 ;i < theLists.size(); i++)
{
theLists[i].clear();
}
}
bool HashTable::contains(const HashedObj & x)const
{
const list<HashedObj> & whichlist = theLists[ myhash(x) ];
return find(whichlist.begin(), whichlist.end(),x)!=whichlist.end();
}
bool HashTable::remove(const HashedObj& x)
{
list< HashedObj>& whichlist = theLists[ myhash(x)];
list<HashedObj>::iterator iter = find ( whichlist.begin(),whichlist.end(),x);
if ( iter == whichlist.end())
{
return false;
}
else
{
whichlist.erase(iter);
}
--currentSize;
return true;
}
bool HashTable::insert(const HashedObj &x)
{
list<HashedObj>& whichlist = theLists[hash(HashedObj& x)];
if ( find(whichlist.begin(),whichlist.end(),x) == whichlist.end())
{
whichlist.push_back(x);
}
else
{
return false;
}
if ( ++currentSize > theLists.size())
{
rehash();
}
return true;
}
void main(void)
{
}
- c++ stl 哈希表(未完成)
- (未完成)C语言程序设计
- C++STL总结(附带容器迭代器泛型算法详情链接【未完成】)
- STL在使用算法竞赛中的使用方法 (教程+未完成)
- 回调 Objective-c 实现研究(未完成)
- c语言连珠五子棋(未完成)
- C语言知识点汇总(未完成)
- 小菜鸟得C#小项目(未完成)
- C#MyAccounting )课本P229~237页,还未完成
- (未完成)《C和指针》第一章 快速上手
- C++(STL)
- 一些想法(未完成)
- ADO简介(未完成)
- 初始化(未完成)
- 递归操作(未完成)
- VC学习(未完成)
- 内部类(未完成)
- 括号匹配(未完成)
- 完美解决ASP 不能更新。数据库或对象为只读。
- 项目杂记
- 可重入函数与不可重入函数
- 转一个好文章
- 理解O/R Mapping
- c++ stl 哈希表(未完成)
- 学习过程中一些心得
- (转+修改)安装VS2010后的帮助文档安装出现错误:未能在指定文件夹中创建本地存储区.....
- 8月目标
- 求一组数据中的最大值及最小值
- android NoticificationManager状态栏操作
- 阅读的快餐式倾向
- GridView 加入自動編號欄位
- CXF之从wsdl first开始的异步调用