Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //p5.cpp
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <vector>
- #include "hashtable.h"
- int main() {
- int input=0;
- HashTable hash(10);
- std::cout << "Hash Tables\n";
- while (std::cin >> input) {
- std::cout << input << " = " << hash.hash(input) << std::endl;
- hash.insert(input, std::to_string(input));
- }
- return 0;
- };
- //hashtable.h
- #ifndef HASHTABLE__H
- #define HASHTABLE__H
- #include <vector>
- #include <string>
- #include "record.h"
- #include <cmath>
- class HashTable {
- public:
- HashTable(int=100);
- int hash(int); // hash value for key
- int hash(Record &); // hash value for record
- void insert(int,std::string); // insert copy of record
- std::string to_string(); // returns string of current hash
- private:
- int m; // capacity of hash
- std::vector<Record> A[]; // hash
- };
- #endif
- //hashtable.cpp
- #include <iostream>
- #include <vector>
- #include <cmath>
- #include <string>
- #include "record.h"
- #include "hashtable.h"
- const double C=(sqrt(5)-1)/2; // hash constant
- HashTable::HashTable(int size) {
- m=size+1; // capacity of hash (zero isn't used, so +1 is added)
- std::vector<Record> A[m];
- }
- void HashTable::insert(int id, std::string data) {
- A[hash(id)].push_back(Record(id,data));
- }
- int HashTable::hash(int k) {
- return (int)floor(m*(k*C-floor(k*C)));
- }
- int HashTable::hash(Record &record) {
- int k=record.id;
- return (int)floor(m*(k*C-floor(k*C)));
- }
- std::string HashTable::to_string() {
- std::string str="";
- for (int i=0; i<m; i++) {
- str+="A["+std::to_string(i)+"]\n";
- for (int j=0; j<A[i].size(); j++) {
- str+="["+std::to_string(j)+"]={"+A[i][j].data;
- if (j<A[i].size()-1)
- str+=", ";
- }
- str+="}\n";
- }
- return str;
- }
- //record.h
- #ifndef RECORD__H
- #define RECORD__H
- class Record {
- public:
- int id;
- std::string data;
- Record();
- Record(int,std::string);
- Record* clone();
- };
- #endif
- //record.cpp
- #include <iostream>
- #include <string>
- #include "record.h"
- Record::Record() {
- id=0;
- data="";
- }
- Record::Record(int id, std::string data) {
- this->id=id;
- this->data=data;
- }
- Record *Record::clone() {
- Record *rec = new Record(id, data);
- return rec;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement