存储 key/value的hashtable
来源:互联网 发布:在windows上启动mysql 编辑:程序博客网 时间:2024/05/29 03:12
#include<iostream>
#include<string>
#include<vector>
#include<utility>
using namespace std;
// key/value 哈希表
const int TABLESIZE = 10;
class DataNode{
public:
DataNode(string k, string v){
key=k;
value=v;
}
public:
string key;
string value;
};
class HashTable{
public:
bool addNode(string k, string v);
string findValue(string k);
bool deleteNode(string k);
int hashFunc(string k); //return 0-TABLESIZE-1
void display();
private:
vector<DataNode> hashTable[TABLESIZE];
};
void
HashTable::display(){
for(int i=0;i<TABLESIZE;++i){
cout<<"Node"<<i<<": -> ";
for(int j=0; j<hashTable[i].size(); ++j){
cout<<hashTable[i][j].key<<"-"<<hashTable[i][j].value<< " -> ";
}
cout<<endl;
}
}
//key值重复, 直接覆盖
bool
HashTable::addNode(string k, string v){
int index = hashFunc(k);
for(int i=0; i<hashTable[index].size(); ++i){
if(hashTable[index][i].key==k){
cout<<"==!!!"<<endl;
hashTable[index][i].value = v;
return true;
}
}
hashTable[index].push_back(DataNode(k,v));
}
string
HashTable::findValue(string k){
int index = hashFunc(k);
for(int i=0; i<hashTable[index].size(); ++i){
if(hashTable[index][i].key==k){
return hashTable[index][i].value;
}
}
string res = "";
return res;
}
bool
HashTable::deleteNode(string k){
int index = hashFunc(k);
vector<DataNode>::iterator iter=hashTable[index].begin();
for(; iter!=hashTable[index].end();++iter){
if(iter->key==k){
hashTable[index].erase(iter);
return true;
}
}
return false;
}
int
HashTable::hashFunc(string k){
int sum = 0;
for(int i=0;i<k.length();++i){
sum += k[i];
}
return sum%10;
}
int main(){
HashTable ht;
ht.addNode("key1","val1");
ht.addNode("key2","valddd");
ht.addNode("key3","valddd");
ht.addNode("key4","valddd");
ht.addNode("key1","va222");
string res = ht.findValue("key4");
if(res.empty()){
cout<<"res==NULL"<<endl;
}else{
cout<<res<<endl;
}
ht.deleteNode("key3");
ht.display();
return 0;
}
#include<string>
#include<vector>
#include<utility>
using namespace std;
// key/value 哈希表
const int TABLESIZE = 10;
class DataNode{
public:
DataNode(string k, string v){
key=k;
value=v;
}
public:
string key;
string value;
};
class HashTable{
public:
bool addNode(string k, string v);
string findValue(string k);
bool deleteNode(string k);
int hashFunc(string k); //return 0-TABLESIZE-1
void display();
private:
vector<DataNode> hashTable[TABLESIZE];
};
void
HashTable::display(){
for(int i=0;i<TABLESIZE;++i){
cout<<"Node"<<i<<": -> ";
for(int j=0; j<hashTable[i].size(); ++j){
cout<<hashTable[i][j].key<<"-"<<hashTable[i][j].value<< " -> ";
}
cout<<endl;
}
}
//key值重复, 直接覆盖
bool
HashTable::addNode(string k, string v){
int index = hashFunc(k);
for(int i=0; i<hashTable[index].size(); ++i){
if(hashTable[index][i].key==k){
cout<<"==!!!"<<endl;
hashTable[index][i].value = v;
return true;
}
}
hashTable[index].push_back(DataNode(k,v));
}
string
HashTable::findValue(string k){
int index = hashFunc(k);
for(int i=0; i<hashTable[index].size(); ++i){
if(hashTable[index][i].key==k){
return hashTable[index][i].value;
}
}
string res = "";
return res;
}
bool
HashTable::deleteNode(string k){
int index = hashFunc(k);
vector<DataNode>::iterator iter=hashTable[index].begin();
for(; iter!=hashTable[index].end();++iter){
if(iter->key==k){
hashTable[index].erase(iter);
return true;
}
}
return false;
}
int
HashTable::hashFunc(string k){
int sum = 0;
for(int i=0;i<k.length();++i){
sum += k[i];
}
return sum%10;
}
int main(){
HashTable ht;
ht.addNode("key1","val1");
ht.addNode("key2","valddd");
ht.addNode("key3","valddd");
ht.addNode("key4","valddd");
ht.addNode("key1","va222");
string res = ht.findValue("key4");
if(res.empty()){
cout<<"res==NULL"<<endl;
}else{
cout<<res<<endl;
}
ht.deleteNode("key3");
ht.display();
return 0;
}
0 0
- 存储 key/value的hashtable
- HashMap和HashTable,HashMap中key和value的原理
- 遍历Hashtable中的key和value的几种方法
- HashMap和HashTable,HashMap中key和value的原理
- HashMap和HashTable,HashMap中key和value的原理
- HashMap、HashTable的key和value是否可为null
- Hashtable/HashMap与key/value为null的关系
- HashMap、HashTable的key和value是否可为null
- Hashtable/HashMap与key/value为null的关系
- 基于共享内存的key-value存储
- 基于共享内存的key-value存储
- Friendfeed的MySQL key/value存储
- 分布式key-Value存储
- Key-Value 存储
- Key-value存储简介
- Key-value存储
- Map存储 (key, value)
- Key-value存储简介
- CMarkup的保存与读取
- WIN32串口编程详解(一)
- Codeforces544C:Writing Code(完全背包)
- druid项目实例
- hdu 4966 GGS-DDU(无固定根的最小树形图)
- 存储 key/value的hashtable
- Exe4j破解_Exe4j注册码
- WIN32串口编程详解(二)
- XDOJ 数独
- Cstring转char、string、int等数据类型的方法
- 监听密码框大小写提示
- Android:圆角ImageView
- Excel数据导入到oracle数据库
- android重启流程