SlideShare a Scribd company logo
1 of 34
Sheet1Amy's One Day Food RecallHeight: 5 ft 8 inchesAge:
19Weight: 134 lbsGender: FemaleFood
DescriptionQuantitycarbohydrate (g)protein (g)Fat (g)Saturated
fat (g)Cholesterol (mg)Fiber (g)Sodium (mg)potassium
(mg)CaloriesToasted multigrain bread1
slice12410021086573Creamy peanut butter with added salt2
Tbsp7716302136179200BananaOne100031435104Garlic
hummus3 Tbsp748103192140116Baby carrots7
sticks9100038224940Salted pretzels15
twists482002744134234Cooked white Jasmine rice (no oil)1
cup4640001255200Seared filet of salmon3
oz0236248045387Raw shredded romaine lettuce1
cup20000141168Feta cheese crumbled1 oz14425017089374Raw
cherry tomatoes whole6 small
tomatoes410001524220Vinaigrette2 Tbsps4061002922570Raw
cucumber sliced with peel½ cup2000001768Lindt dark
chocolate 70% cocoa2 squares1116421300Black coffee1
cup01000021244Granulated sugar1 Tsp4000000016Whole milk1
cup1285240105322152
Source/Assg13/assg-13.cppSource/Assg13/assg-13.cpp/**
*
*
* @description Assignment 13 Dictionaries and Hash table
* implementations.
*/
#include<cassert>
#include<iostream>
#include"KeyValuePair.hpp"
#include"Employee.hpp"
#include"HashDictionary.hpp"
usingnamespace std;
/** main
* The main entry point for this program. Execution of this pro
gram
* will begin with this main function.
*
* @param argc The command line argument count which is the
number of
* command line arguments provided by user when they starte
d
* the program.
* @param argv The command line arguments, an array of chara
cter
* arrays.
*
* @returns An int value indicating program exit status. Usuall
y 0
* is returned to indicate normal exit and a non-zero value
* is returned to indicate an error condition.
*/
int main(int argc,char** argv)
{
// -----------------------------------------------------------------------
cout <<"-----
testing Employee record and KeyValuePair class -----------
"<< endl;
KeyValuePair<int, string> pair(42,"blue");
cout <<"test key: "<< pair.key()<< endl;
assert(pair.key()==42);
cout <<"test value: "<< pair.value()<< endl;
assert(pair.value()=="blue");
int id =3;
Employee e(id,"Derek Harter","1234 Main Street, Commerce T
X",12345.67);
cout << e << endl;
assert(e.getId()==3);
assert(e.getName()=="Derek Harter");
cout << endl;
// -----------------------------------------------------------------------
cout <<"-------------- testing quadratic probing ------------------
-----"<< endl;
constint TABLE_SIZE =7;
HashDictionary<int,Employee> dict(TABLE_SIZE, EMPTY_E
MPLOYEE_ID);
cout <<"Newly created hash dictionary should be empty, size:
"<< dict.size()<< endl;
assert(dict.size()==0);
int probeIndex =0;
//cout << "probe index: " << probeIndex
// << " returned probe value: " << dict.probe(id, probeIndex)
// << endl;
//assert(dict.probe(id, probeIndex) == 2);
probeIndex =1;
//cout << "probe index: " << probeIndex
// << " returned probe value: " << dict.probe(id, probeIndex)
// << endl;
//assert(dict.probe(id, probeIndex) == 5);
probeIndex =5;
//cout << "probe index: " << probeIndex
// << " returned probe value: " << dict.probe(id, probeIndex)
// << endl;
//assert(dict.probe(id, probeIndex) == 37);
cout << endl;
// -----------------------------------------------------------------------
cout <<"-------------- testing mid-square hashing ---------------
-------"<< endl;
// the following asserts will only work for 32 bit ints, leave asse
rts
// commented out if you have 64 bit asserts
cout <<"Assuming 32 bit (4 byte) ints for these tests: "<<sizeo
f(int)<< endl;
assert(sizeof(int)==4);
//id = 3918;
//cout << "hash key: " << id
// << " returned hash value: " << dict.hash(id)
// << endl;
//assert(dict.hash(id) == 1);
//id = 48517;
//cout << "hash key: " << id
// << " returned hash value: " << dict.hash(id)
// << endl;
//assert(dict.hash(id) == 6);
//id = 913478;
//cout << "hash key: " << id
// << " returned hash value: " << dict.hash(id)
// << endl;
//assert(dict.hash(id) == 5);
//id = 8372915;
//cout << "hash key: " << id
// << " returned hash value: " << dict.hash(id)
// << endl;
//assert(dict.hash(id) == 4);
// test that the distribution of the hash values
// over the possible slots/buckets looks relatively
// evenly distributed
int counts[TABLE_SIZE]={0};
//for (id = 0; id < 1000000; id++)
//{
// int hash = dict.hash(id);
// counts[hash]++;
//}
// display results
int sum =0;
for(int slot =0; slot < TABLE_SIZE; slot++)
{
cout <<"counts for slot["<< slot <<"] = "
<< counts[slot]<< endl;
sum = sum + counts[slot];
}
// spot check results
//assert(sum == 1000000);
//assert(counts[0] == 143055);
//assert(counts[6] == 142520);
cout << endl;
// -----------------------------------------------------------------------
cout <<"-------------- testing dictionary insertion ---------------
-----"<< endl;
id =438901234;
//dict.insert(id, Employee(id, "Derek Harter", "123 Main St. Co
mmerce TX", 58.23));
id =192834192;
//dict.insert(id, Employee(id, "Alice White", "384 Bois'darc. Ca
mpbell TX", 45.45));
id =998439281;
//dict.insert(id, Employee(id, "Bob Green", "92 Washington Apt
. 5 Greenville TX", 16.00));
id =362817371;
//dict.insert(id, Employee(id, "Carol Black", "8913 FM 24 Coop
er TX", 28.50));
cout <<"After inserting "<< dict.size()<<" employees:"<< endl
;
cout << dict << endl;
// spot check that hash table entries were correctly performed
//assert(dict.size() == 4);
//assert(dict[3].key() == 192834192);
//assert(dict[3].value().getName() == "Alice White");
//assert(dict[1].key() == 438901234);
//assert(dict[1].value().getName() == "Derek Harter");
cout << endl;
// -----------------------------------------------------------------------
cout <<"-------------- testing dictionary search ------------------
-----"<< endl;
id =438901234;
//e = dict.find(id);
//cout << "Search for id: " << id << endl;
//cout << " Found employee: " << e << endl;
//assert(e.getId() == id);
//assert(e.getName() == "Derek Harter");
id =362817371;
//e = dict.find(id);
//cout << "Search for id: " << id << endl;
//cout << " Found employee: " << e << endl;
//assert(e.getId() == id);
//assert(e.getName() == "Carol Black");
id =239481432;
//e = dict.find(id);
//cout << "Unsuccessful Search for id: " << id << endl;
//cout << " Found employee: " << e << endl;
//assert(e.getId() == EMPTY_EMPLOYEE_ID);
//assert(e.getName() == "");
cout << endl;
// return 0 to indicate successful completion
return0;
}
Source/Assg13/assg13.pdf
Assg 13: Dictionaries and Hashing
COSC 2336 Spring 2019
April 18, 2019
Dates:
Due: Sunday May 05, by Midnight
Objectives
• More practice with using class templates
• Learn about implementing and using key/value pair Dictionary
ab-
straction
• Implement and learn about some basic hashing techniques,
like mid-
square hasing and quadratic probing for closed hashing
schemes.
Description
In this assignment you will be implementing some basic
mechanisms of a
hash table to implement a Dictionary that uses hashing to store
and search
for items in its collection. You have been given many files for
this assign-
ment. I have provided an Employee class in
"Employee.[hpp|cpp]" and a
KeyValuePair class in "KeyValuePair.[hpp|cpp]". You will not
need to make
any changes to these files or classes, they should work as given
for this as-
signment.
You will be adding and implementing some member functions to
the
HashDictionary class. The initial "HashDictionary.[hpp|cpp]"
file contains
a constructor and destructor for a HashDictionary as well as
some other
accessors and operators already implemented that are used for
testing.
You will be implementing a closed hash table mechanism using
quadratic
probing of the slots. You will also implement a version of the
mid-square
1
hashing function described in our textbook (Shaffer section
9.4.3 on closed
hashing mechinsms).
For this assignment you need to perform the following tasks.
1. Your first task is to implement methods to define the probe
sequence
for closed hasing. Add a member function named probe() to the
HashDictionary class. Be aware that the HashDictionary class is
a templatized on <Key, Value> templates, thus when you
implement
the class methods you need to templatize the class methods
correctly.
You can look at the example implementations of size() and the
con-
structors to remind yourself how to do this correctly.
In any case, probe() is a member function that takes two
parameters,
a Key and an integer index value. We are not using secondary
hashing
(as described in our textbook) so the Key value will actually not
be
used in your function. However, keep it as a parameter as the
gen-
eral abstraction/API for the probe function should include it for
cases
where secondary hashing is used. probe() should be a const
class
member function, as calling it does not change the dictionary.
Finally
probe() will return an ineger as its result.
Your probe() funciton should implement a quadratic probing
scheme
as described in our Shaffer textbook section 9.4.3 on pg. 338.
Use
c1 = 1, c2 =2, c3 = 2 as the parameters for your quadratic probe
(the tests of probe() assume your probe sequence is using these
pa-
rameter values for the quadratic function).
2. You second tasks is to implement a hash function for integer
like keys
using the described mid-square hasing function (Shaffer 9.4.1
Example
9.6 pg. 327). We will create a slight variation of this algorithm
for our
hashing dictionary. First of all the hash() member functions
should
take a Key as its only input parameter, and it will then return a
regular
int as its result. Since this is a hash function, the integer value
should
be in the range 0 - tableSize-1, so don’t forget to mod by the
tableSize before returning your hash result.
hash() should work like this. First of all, you should square the
key
value that is passed in. Then, assuming we are working with a
32 bit
int, we want to only keep the middle 16 bits of the square of the
key
to use for our hash. There are many ways to work with and get
the
bits you need, but most likely you will want to use C bitwise
operators
to do this. For example, a simple method to get the middle 16
bits is
2
to first mask out the upper 8 bits using the bitwise & operator
(e.g.
key & 0x00FFFFFF) will mask out the high order 8 bits to 0).
Then
once you have removed the upper most significant 8 bits, you
can left
shift the key by 8 bits, thus dropping out the lower least
significant
8 bits (e.g. key >> 8). Performing a mask of the upper 8 bits and
shifting out the lower 8 bits will result in you only retaining the
middle
16 bits.
If your system is using 64 bit integers rather than 32 bit
integers,
perform the mid-square method but retain the middle 32 bits of
the
result. You can use the sizeof(int) method to determine how
many
bytes are in an int on your system. I will give a bonus point if
you
write your hash() function to correctly work for both 32 and 64
bit
values by testing sizeof(int) and doing the appopriate work to
get
the middle bits. Again after you square the key and get the
middle
bits, make sure you modulo the result to get an actual has index
in the
correct range.
3. The third task is to add the insert()method to your
HashDictionary
so that you can insert new key/value pairs into the dictionary.
insert() should take a constant Key reference and a constant
Value
reference as its input parameters (note that both of these
parameters
should be declared as const, and they should both be reference
pa-
rameters, so use the & to indicate they are passed by reference).
Your
insert() function does not return a result, so it will be a void
func-
tion.
The algorithm for insert is described in Shaffer 9.4.3 on pg.
334. You
need to call and use the probe() and hash() funciton you created
in the first 2 steps to correctly define/implement your closed
hashing
probe sequence. The basica algorithm is that you use hash() to
de-
termine the initial home slot, and probe() gives an offset you
should
add. Basically you have to search the hashTable using the probe
se-
quence until you find an empty slot. Once you find an empty
slot, you
should create a new instance of a KeyValuePair<Key, Value>
object,
that contains the key and value that were provided as input
param-
eters to your insert() function. This KeyValuePair instance
should
then be inserted into the table at the location where you find the
first
empty slot on the probe sequence. Also don’t forget to update
the
valueCount paramemter of the HashDictionary class that keeps
track
of the number of items currently in the dictionary.
3
4. Finally you will also implement the find() method to search
for a
particular key in your dictionary. The find() member function
taks
a single Key parameter as input (it should be a const Key&
reference
parameter). The find() functin will return a Value as a result,
which
will be the Value of the record associated with the given Key if
it was
found in the dictionary, or an empty Value() object if it was not
found.
The find() method uses the same probe sequence as insert()
imple-
mented by your probe() and hash() methods. So you should
again
search along the probe sequence, until you either find the key
you were
given to search for, or else find an empty slot. Then at the end,
if
you found the key in the hashTable you should return the value
that
corresponds to the key that was searched for. If the search
failed and
you found an empty slot on your probe sequence, you should
instead
return an empty Value() object, which is used as an indicator
for a
failed search.
In this assignment you will be given a lot of starting code. As
usual, there is an "assg-13.cpp" file which contains commented
out tests
of the code/functions you are to write. You have been given and
"Em-
ployee.[hpp|cpp]" file containing a simple definition of a (non-
templated)
class/record that holds a few pieces of information about a
theoretical
Employee. We use this class to create a hash dictionary for
testing with
the employee id as the key, and the Employee record as the
associated value
in our Dictionary. You have also been given a template class in
the file
"KeyValuePair.[hpp|cpp]". This contains a templatized
container to holding
a key/value pair of items. You will not need to add any code or
make any
changes in the Employee or KeyValuePair class files.
You have also been given a "HashDictionary.[hpp|cpp]" file
containing
beginning defintions of a HashDictionary class. The member
functions you
need to add for this assignment should be added to these files.
Here is an example of the output you should get if your code is
passing
all of the tests and is able to run the simulation. You may not
get the
exact same statistics for the runSimulation() output, as the
simulation is
generating random numbers, but you should see similar values.
----- testing Employee record and KeyValuePair class -----------
test key: 42
test value: blue
( id: 3, Derek Harter, 1234 Main Street, Commerce TX,
12345.67 )
4
-------------- testing quadratic probing -----------------------
Newly created hash dictionary should be empty, size: 0
probe index: 0 returned probe value: 2
probe index: 1 returned probe value: 5
probe index: 5 returned probe value: 37
-------------- testing mid-square hashing ----------------------
Assuming 32 bit (4 byte) ints for these tests: 4
hash key: 3918 returned hash value: 1
hash key: 48517 returned hash value: 6
hash key: 913478 returned hash value: 5
hash key: 8372915 returned hash value: 4
counts for slot[0] = 143055
counts for slot[1] = 143040
counts for slot[2] = 143362
counts for slot[3] = 142399
counts for slot[4] = 142966
counts for slot[5] = 142658
counts for slot[6] = 142520
-------------- testing dictionary insertion --------------------
After inserting 4 employees:
Slot: 0
Key : 362817371
Value: ( id: 362817371, Carol Black, 8913 FM 24 Cooper TX,
28.50 )
Slot: 1
Key : 438901234
Value: ( id: 438901234, Derek Harter, 123 Main St. Commerce
TX, 58.23 )
Slot: 2
Key : 0
Value: ( id: 0, , , 0.00 )
Slot: 3
Key : 192834192
Value: ( id: 192834192, Alice White, 384 Bois'darc. Campbell
TX, 45.45 )
Slot: 4
5
Key : 998439281
Value: ( id: 998439281, Bob Green, 92 Washington Apt. 5
Greenville TX, 16.00 )
Slot: 5
Key : 0
Value: ( id: 0, , , 0.00 )
Slot: 6
Key : 0
Value: ( id: 0, , , 0.00 )
-------------- testing dictionary search -----------------------
Search for id: 438901234
Found employee: ( id: 438901234, Derek Harter, 123 Main St.
Commerce TX, 58.23 )
Search for id: 362817371
Found employee: ( id: 362817371, Carol Black, 8913 FM 24
Cooper TX, 28.50 )
Unsuccessful Search for id: 239481432
Found employee: ( id: 0, , , 0.00 )
Assignment Submission
A MyLeoOnline submission folder has been created for this
assignment. You
should attach and upload your completed
"HashDictionary.[hpp|cpp]" source
files to the submission folder to complete this assignment. You
do not need
to submit your "assg-13.cpp" file with the tests, nor the
Employee or KeyVal-
uePair files, since you should not have made changes to any of
these (except
to uncomment out the tests in assg-13.cpp). Please only submit
the asked
for source code files, I do not need your build projects,
executables, project
files, etc.
6
Requirements and Grading Rubrics
Program Execution, Output and Functional Requirements
1. Your program must compile, run and produce some sort of
output to
be graded. 0 if not satisfied.
2. (20 pts.) probe() member function implemented. Function is
using
quadratic probing as asked for, with correct values for c1, c2
and c3
parameters. Probe sequence appears correct and passes tests.
3. (20 pts.) hash() member function implemented correctly.
Function
implements the mid-square method as described. Function
correctly
uses only the 16 middle bits if system uses 32 bit integers.
4. (30 pts.) insert() member function implemented and working.
Func-
tion appears to be correctly generating probe sequence using the
probe() and hash() functions. Items are correctly inserted into
ex-
pected location in the hash table.
5. (30 pts.) find()member function implemented and working.
Function
appears to be also correctly using the probe sequence in the
same was
as insert(). Function passes the expected tests.
Program Style
Your programs must conform to the style and formatting
guidelines given
for this class. The following is a list of the guidelines that are
required for
the assignment to be submitted this week.
1. Most importantly, make sure you figure out how to set your
indentation
settings correctly. All programs must use 2 spaces for all
indentation
levels, and all indentation levels must be correctly indented.
Also all
tabs must be removed from files, and only 2 spaces used for
indentation.
2. A function header must be present for member functions you
define.
You must give a short description of the function, and document
all of
the input parameters to the function, as well as the return value
and
data type of the function if it returns a value for the member
functions,
just like for regular functions. However, setter and getter
methods do
not require function headers.
7
3. You should have a document header for your class. The class
header
document should give a description of the class. Also you
should doc-
ument all private member variables that the class manages in
the class
document header.
4. Do not include any statements (such as system("pause") or
inputting
a key from the user to continue) that are meant to keep the
terminal
from going away. Do not include any code that is specific to a
single
operating system, such as the system("pause") which is
Microsoft
Windows specific.
8
Source/Assg13/Employee.cppSource/Assg13/Employee.cpp/**
* @description Simple example of an Employee record/class
* we can use to demonstrate HashDictionary key/value pair
* management.
*/
#include<string>
#include<iostream>
#include<iomanip>
#include<sstream>
#include"Employee.hpp"
usingnamespace std;
/** constructor
* Default constructor for our Employee record/class. Construct
an
* empty employee record
*/
Employee::Employee()
{
this->id = EMPTY_EMPLOYEE_ID;
this->name ="";
this->address ="";
this->salary =0.0;
}
/** constructor
* Basic constructor for our Employee record/class.
*/
Employee::Employee(int id, string name, string address,float sal
ary)
{
this->id = id;
this->name = name;
this->address = address;
this->salary = salary;
}
/** id accessor
* Accessor method to get the employee id.
*
* @returns int Returns the integer employee id value.
*/
intEmployee::getId()const
{
return id;
}
/** name accessor
* Accessor method to get the employee name.
*
* @returns string Returns the string containing the full
* employee name for this record.
*/
string Employee::getName()const
{
return name;
}
/** overload operator<<
* Friend function to ouput representation of Employee to an
* output stream.
*
* @param out A reference to an output stream to which we sho
uld
* send the representation of an employee record for display.
* @param employee The reference to the employee record to be
displayed.
*
* @returns ostream& Returns a reference to the original output
* stream, but now the employee information should have been
* inserted into the stream for display.
*/
ostream&operator<<(ostream& out,Employee& employee)
{
//out << "Employee id: " << employee.id << endl
// << " name : " << employee.name << endl
// << " address: " << employee.address << endl
// << " salary : " << fixed << setprecision(2) << employee.s
alary << endl;
out <<"( id: "<< employee.id <<", "
<< employee.name <<", "
<< employee.address <<", "
<< fixed << setprecision(2)<< employee.salary <<" )"<< endl;
return out;
}
Source/Assg13/Employee.hpp
/**
* @description Simple example of an Employee record/class
* we can use to demonstrate HashDictionary key/value pair
* management.
*/
#include <string>
#include <iostream>
using namespace std;
#ifndef EMPLOYEE_HPP
#define EMPLOYEE_HPP
// This should really be a class constant, however this
// global constant represents a flag that is used to
// indicate empty slots and/or failed search.
const int EMPTY_EMPLOYEE_ID = 0;
/** Employee
* A simple Employee class/record to demonstrate/test
* our hashing dictionary assignment.
* NOTE: we are using 0 as a flag to represent an unused
* slot or an invalid/empty employee. This is used/assumed
* by our dictionary class to determine if a slot is empty
* and/or to give a failure result for a failed search.
*/
class Employee
{
private:
int id;
string name;
string address;
float salary;
public:
Employee();
Employee(int id, string name, string address, float salary);
int getId() const;
string getName() const;
friend ostream& operator<<(ostream& out, Employee&
employee);
};
#endif // EMPLOYEE_HPP
Source/Assg13/HashDictionary.cppSource/Assg13/HashDictiona
ry.cpp/**
* @description Template class for definining a dictionary
* that uses a hash table of KeyValuePair items.
* Based on Shaffer hashdict implementation pg. 340
*/
/** constructor
* Standard constructor for the HashDictionary
*
* @param tableSize The size of the hash table that should be
* generated for internal use by this dictionary for hasing.
* @param emptyKey A special flag/value that can be used to d
etect
* invalid/unused keys. We need this so we can indicate which
* slots/buckets in our hash table are currently empty, and also
* this value is used as a return result when an unsuccessful
* search is performed on the dictionary.
*/
template<classKey,classValue>
HashDictionary<Key,Value>::HashDictionary(int tableSize,Key
emptyKey)
{
this->tableSize = tableSize;
this->EMPTYKEY = emptyKey;
valueCount =0;
// allocate an array/table of the indicated initial size
hashTable =newKeyValuePair<Key,Value>[tableSize];
// initialize the hash table so all slots are initially empty
for(int index =0; index < tableSize; index++)
{
hashTable[index].setKey(EMPTYKEY);
}
}
/** destructor
* Standard destructor for the HashDictionary. Be good memor
y managers and
* free up the dynamically allocated array of memory pointed to
by hashTable.
*/
template<classKey,classValue>
HashDictionary<Key,Value>::~HashDictionary()
{
delete[] hashTable;
}
/** size
* Accessor method to get the current size of this dictionary,
* e.g. the count of the number of key/value pairs currently bein
g
* managed in our hash table.
*
* @returns in Returns the current number of items being manag
ed by
* this dictionary and currently in our hashTable.
*/
template<classKey,classValue>
intHashDictionary<Key,Value>::size()const
{
return valueCount;
}
// Place your implementations of the class methods probe(), has
h(),
// insert() and find() here
/** overload indexing operator[]
* Overload indexing operator[] to provide direct access
* to hash table. This is not normally part of the Dictionary
* API/abstraction, but included here for testing.
*
* @param index An integer index. The index should be in the r
ange 0 - tablesize-1.
*
* @returns KeyValuePair<> Returns a KeyValuePair object if t
he index into the
* internal hash table is a valid index. This method throws an
exception if
* the index is not a valid slot of the hash table.
*/
template<classKey,classValue>
KeyValuePair<Key,Value>&HashDictionary<Key,Value>::oper
ator[](int index)
{
if(index <0|| index >= tableSize)
{
cout <<"Error: <HashDictionary::operator[] invalid index: "
<< index <<" table size is currently: "
<< tableSize << endl;
assert(false);
}
return hashTable[index];
}
/** HashDictionary output stream operator
* Friend function for HashDictionary. We normally wouldn't h
ave
* something like this for a Dictionary or HashTable, but for tes
ting
* and learning purposes, we want to be able to display the cont
ents of
* each slot in the hash table of a HashDictionary container.
*
* @param out An output stream reference into which we should
insert
* a representation of the given HashDictionary.
* @param aDict A HashDictionary object that we want to displ
ay/represent
* on an output stream.
*
* @returns ostream& Returns a reference to the original given
output stream,
* but now the values representing the dictionary we were give
n should
* have been sent into the output stream.
*/
template<typename K,typename V>
ostream&operator<<(ostream& out,constHashDictionary<K, V>
& aDict)
{
for(int slot =0; slot < aDict.tableSize; slot++)
{
out <<"Slot: "<< slot << endl;
out <<" Key : "<< aDict.hashTable[slot].key()<< endl;
out <<" Value: "<< aDict.hashTable[slot].value()<< endl;
}
out << endl;
return out;
}
Source/Assg13/HashDictionary.hpp
/**
* @description Template class for definining a dictionary
* that uses a hash table of KeyValuePair items.
* Based on Shaffer hashdict implementation pg. 340
*/
#include <cassert>
#include <iostream>
#include "KeyValuePair.hpp"
using namespace std;
#ifndef HASHDICTIONARY_HPP
#define HASHDICTIONARY_HPP
/** HashDictionary
* An implementation of a dictionary that uses a hash table to
insert, search
* and delete a set of KeyValuePair items. In the assignment,
we will be
* implementing a closed hashing table with quadratic probing.
The hash function
* will implement a version of the mid-square hasing function
described in
* our Shaffer textbook.
*
* @value hashTable An array of KeyValuePair items, the hash
table this class/container
* is managing.
* @value tableSize The actual size of the hashTable array
* @value valueCount The number of KeyValuePair items that
are currently being
* managed and are contained in the hashTable
* @value EMPTYKEY A special user-supplied key that can be
used to indicate empty
* slots. Since how we determine what is a valid/invalid key
will depend on the
* key type, the user must supply this special flag/value when
setting up the
* hash dictionary.
*/
template <class Key, class Value>
class HashDictionary
{
protected:
KeyValuePair<Key, Value>* hashTable; // the hash table
int tableSize; // the size of the hash table, e.g. symbol M from
textbook
int valueCount; // the count of the number of value items
currently in table
Key EMPTYKEY; // a special user-supplied key that can be
used to indicate empty slots
public:
// constructors and destructors
HashDictionary(int tableSize, Key emptyKey);
~HashDictionary();
// accessor methods
int size() const;
// searching and insertion
// all 4 of the methods you were required to create for this
// assignment should have appropriate class method signatures
// defined here.
// overload operators (mostly for testing)
KeyValuePair<Key, Value>& operator[](int index);
template <typename K, typename V>
friend ostream& operator<<(ostream& out, const
HashDictionary<K, V>& aDict);
};
#include "HashDictionary.cpp"
#endif // HASHDICTIONARY_HPP
Source/Assg13/KeyValuePair.cppSource/Assg13/KeyValuePair.
cpp/**
* @description Template class for definining Key/Value pairs,
* suitable for dictionary and hash table implementations.
* Based on Shaffer KVPair ADT definition, pg. 139 Fig 4.31.
*/
/** constructor
* Default constructor for a KeyValuePair.
*/
template<classKey,classValue>
KeyValuePair<Key,Value>::KeyValuePair()
{
}
/** constructor
* Standard constructor for a KeyValuePair.
*
* @param key The key portion that is to be stored in this pair.
* @param value The value portion that is to be stored in this pa
ir.
*/
template<classKey,classValue>
KeyValuePair<Key,Value>::KeyValuePair(Key key,Valuevalue)
{
this->myKey = key;
this->myValue =value;
}
/** key accessor
* Accessor method to get and return the key for this key/value
pair
*
* @returns Key Returns an object of template type Key, which
is the
* key portion of the pair in this container.
*/
template<classKey,classValue>
KeyKeyValuePair<Key,Value>::key()
{
return myKey;
}
/** key setter
* Accessor method to set the key for this key/value pair
*
* @param key The new value to update the key to for this pair.
*/
template<classKey,classValue>
voidKeyValuePair<Key,Value>::setKey(Key key)
{
this->myKey = key;
}
/** value accessor
* Accessor method to get and return the value for this key/valu
e pair.
*
* @returns Value& Returns a reference to the value object in th
is
* key value pair container.
*/
template<classKey,classValue>
Value&KeyValuePair<Key,Value>::value()
{
return myValue;
}
Source/Assg13/KeyValuePair.hpp
/**
* @description Template class for definining Key/Value pairs,
* suitable for dictionary and hash table implementations.
* Based on Shaffer KVPair ADT definition, pg. 139 Fig 4.31.
*/
#ifndef KEYVALUEPAIR_HPP
#define KEYVALUEPAIR_HPP
/** KeyValue Pair
* Definition of basic key/value pair container. This container
of course
* associates a value (usually a record like a class or struct),
with
* a key (can be anything).
*
* We do not use the comparator Strategy pattern as discussed
in
* Shaffer pg. 144 here. We assume that the Key type has
suitably
* overloaded operators for <, >, ==, <=, >= operations as
needed
* in order to compare and order keys if needed by dictionaries
and
* hash tables using a KeyValuePair.
*
* @value key The key for a key/value pair item/association.
* @value value The value for a key/value pair, usually
something like
* a record (a class or struct of data we are hashing or keeping
in
* a dictionary).
*/
template <class Key, class Value>
class KeyValuePair
{
private:
Key myKey;
Value myValue;
public:
// constructors
KeyValuePair();
KeyValuePair(Key key, Value value);
// accessors, getters and setters
Key key();
void setKey(Key key);
Value& value();
};
#include "KeyValuePair.cpp"
#endif // KEYVALUEPAIR_HPP

More Related Content

Similar to Sheet1Amys One Day Food RecallHeight 5 ft 8 inchesAge 19Weight.docx

Rob Sullivan at Heroku's Waza 2013: Your Database -- A Story of Indifference
Rob Sullivan at Heroku's Waza 2013: Your Database -- A Story of IndifferenceRob Sullivan at Heroku's Waza 2013: Your Database -- A Story of Indifference
Rob Sullivan at Heroku's Waza 2013: Your Database -- A Story of IndifferenceHeroku
 
クラウドDWHとしても進化を続けるPivotal Greenplumご紹介
クラウドDWHとしても進化を続けるPivotal Greenplumご紹介クラウドDWHとしても進化を続けるPivotal Greenplumご紹介
クラウドDWHとしても進化を続けるPivotal Greenplumご紹介Masayuki Matsushita
 
Using-Python-Libraries.9485146.powerpoint.pptx
Using-Python-Libraries.9485146.powerpoint.pptxUsing-Python-Libraries.9485146.powerpoint.pptx
Using-Python-Libraries.9485146.powerpoint.pptxUadAccount
 
Gotcha! Ruby things that will come back to bite you.
Gotcha! Ruby things that will come back to bite you.Gotcha! Ruby things that will come back to bite you.
Gotcha! Ruby things that will come back to bite you.David Tollmyr
 
Lecture 9_Classes.pptx
Lecture 9_Classes.pptxLecture 9_Classes.pptx
Lecture 9_Classes.pptxNelyJay
 
Java script advance-auroskills (2)
Java script advance-auroskills (2)Java script advance-auroskills (2)
Java script advance-auroskills (2)BoneyGawande
 
CSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksCSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksRoman Dvornov
 
E2 – Fundamentals, Functions & ArraysPlease refer to announcemen.docx
E2 – Fundamentals, Functions & ArraysPlease refer to announcemen.docxE2 – Fundamentals, Functions & ArraysPlease refer to announcemen.docx
E2 – Fundamentals, Functions & ArraysPlease refer to announcemen.docxjacksnathalie
 
C++ process new
C++ process newC++ process new
C++ process new敬倫 林
 
Problem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdfProblem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdfebrahimbadushata00
 
Just in time (series) - KairosDB
Just in time (series) - KairosDBJust in time (series) - KairosDB
Just in time (series) - KairosDBVictor Anjos
 
ch03-parameters-objects.ppt
ch03-parameters-objects.pptch03-parameters-objects.ppt
ch03-parameters-objects.pptMahyuddin8
 

Similar to Sheet1Amys One Day Food RecallHeight 5 ft 8 inchesAge 19Weight.docx (20)

Rob Sullivan at Heroku's Waza 2013: Your Database -- A Story of Indifference
Rob Sullivan at Heroku's Waza 2013: Your Database -- A Story of IndifferenceRob Sullivan at Heroku's Waza 2013: Your Database -- A Story of Indifference
Rob Sullivan at Heroku's Waza 2013: Your Database -- A Story of Indifference
 
クラウドDWHとしても進化を続けるPivotal Greenplumご紹介
クラウドDWHとしても進化を続けるPivotal Greenplumご紹介クラウドDWHとしても進化を続けるPivotal Greenplumご紹介
クラウドDWHとしても進化を続けるPivotal Greenplumご紹介
 
lecture56.ppt
lecture56.pptlecture56.ppt
lecture56.ppt
 
Using-Python-Libraries.9485146.powerpoint.pptx
Using-Python-Libraries.9485146.powerpoint.pptxUsing-Python-Libraries.9485146.powerpoint.pptx
Using-Python-Libraries.9485146.powerpoint.pptx
 
Hidden Gems of Ruby 1.9
Hidden Gems of Ruby 1.9Hidden Gems of Ruby 1.9
Hidden Gems of Ruby 1.9
 
Arrays 06.ppt
Arrays 06.pptArrays 06.ppt
Arrays 06.ppt
 
Gotcha! Ruby things that will come back to bite you.
Gotcha! Ruby things that will come back to bite you.Gotcha! Ruby things that will come back to bite you.
Gotcha! Ruby things that will come back to bite you.
 
Lecture 9_Classes.pptx
Lecture 9_Classes.pptxLecture 9_Classes.pptx
Lecture 9_Classes.pptx
 
Chapter 2
Chapter 2Chapter 2
Chapter 2
 
Java script advance-auroskills (2)
Java script advance-auroskills (2)Java script advance-auroskills (2)
Java script advance-auroskills (2)
 
CSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksCSS parsing: performance tips & tricks
CSS parsing: performance tips & tricks
 
E2 – Fundamentals, Functions & ArraysPlease refer to announcemen.docx
E2 – Fundamentals, Functions & ArraysPlease refer to announcemen.docxE2 – Fundamentals, Functions & ArraysPlease refer to announcemen.docx
E2 – Fundamentals, Functions & ArraysPlease refer to announcemen.docx
 
Python-Tuples
Python-TuplesPython-Tuples
Python-Tuples
 
C++ process new
C++ process newC++ process new
C++ process new
 
Javascripting.pptx
Javascripting.pptxJavascripting.pptx
Javascripting.pptx
 
R code for data manipulation
R code for data manipulationR code for data manipulation
R code for data manipulation
 
R code for data manipulation
R code for data manipulationR code for data manipulation
R code for data manipulation
 
Problem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdfProblem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdf
 
Just in time (series) - KairosDB
Just in time (series) - KairosDBJust in time (series) - KairosDB
Just in time (series) - KairosDB
 
ch03-parameters-objects.ppt
ch03-parameters-objects.pptch03-parameters-objects.ppt
ch03-parameters-objects.ppt
 

More from edgar6wallace88877

Write a page to a page and half for each topic and read each topic a.docx
Write a page to a page and half for each topic and read each topic a.docxWrite a page to a page and half for each topic and read each topic a.docx
Write a page to a page and half for each topic and read each topic a.docxedgar6wallace88877
 
Write a page discussing why you believe PMI is focusing BA as the fi.docx
Write a page discussing why you believe PMI is focusing BA as the fi.docxWrite a page discussing why you believe PMI is focusing BA as the fi.docx
Write a page discussing why you believe PMI is focusing BA as the fi.docxedgar6wallace88877
 
Write a page of personal reflection of your present leadership compe.docx
Write a page of personal reflection of your present leadership compe.docxWrite a page of personal reflection of your present leadership compe.docx
Write a page of personal reflection of your present leadership compe.docxedgar6wallace88877
 
Write a page of compare and contrast for the Big Five Personalit.docx
Write a page of compare and contrast for the Big Five Personalit.docxWrite a page of compare and contrast for the Big Five Personalit.docx
Write a page of compare and contrast for the Big Five Personalit.docxedgar6wallace88877
 
Write a page of research and discuss an innovation that includes mul.docx
Write a page of research and discuss an innovation that includes mul.docxWrite a page of research and discuss an innovation that includes mul.docx
Write a page of research and discuss an innovation that includes mul.docxedgar6wallace88877
 
Write a page answering the questions below.Sometimes projects .docx
Write a page answering the questions below.Sometimes projects .docxWrite a page answering the questions below.Sometimes projects .docx
Write a page answering the questions below.Sometimes projects .docxedgar6wallace88877
 
Write a one-paragraph summary of one of the reading assignments from.docx
Write a one-paragraph summary of one of the reading assignments from.docxWrite a one-paragraph summary of one of the reading assignments from.docx
Write a one-paragraph summary of one of the reading assignments from.docxedgar6wallace88877
 
Write a one-paragraph summary of this article.Riordan, B. C..docx
Write a one-paragraph summary of this article.Riordan, B. C..docxWrite a one-paragraph summary of this article.Riordan, B. C..docx
Write a one-paragraph summary of this article.Riordan, B. C..docxedgar6wallace88877
 
Write a one-paragraph response to the following topic. Use the MLA f.docx
Write a one-paragraph response to the following topic. Use the MLA f.docxWrite a one-paragraph response to the following topic. Use the MLA f.docx
Write a one-paragraph response to the following topic. Use the MLA f.docxedgar6wallace88877
 
Write a one-page rhetorical analysis in which you analyze the argume.docx
Write a one-page rhetorical analysis in which you analyze the argume.docxWrite a one-page rhetorical analysis in which you analyze the argume.docx
Write a one-page rhetorical analysis in which you analyze the argume.docxedgar6wallace88877
 
Write a one pageliterature review of your figure( FIGURE A.docx
Write a one pageliterature review of your figure( FIGURE A.docxWrite a one pageliterature review of your figure( FIGURE A.docx
Write a one pageliterature review of your figure( FIGURE A.docxedgar6wallace88877
 
Write a one page-paper documenting the problemneed you wish to .docx
Write a one page-paper documenting the problemneed you wish to .docxWrite a one page-paper documenting the problemneed you wish to .docx
Write a one page-paper documenting the problemneed you wish to .docxedgar6wallace88877
 
Write a one page report on Chapter 1 and 2 with the same style of mo.docx
Write a one page report on Chapter 1 and 2 with the same style of mo.docxWrite a one page report on Chapter 1 and 2 with the same style of mo.docx
Write a one page report on Chapter 1 and 2 with the same style of mo.docxedgar6wallace88877
 
Write a one page reflection about the following1) Identify .docx
Write a one page reflection about the following1) Identify .docxWrite a one page reflection about the following1) Identify .docx
Write a one page reflection about the following1) Identify .docxedgar6wallace88877
 
Write a one page paper on the question belowSome of the current.docx
Write a one page paper on the question belowSome of the current.docxWrite a one page paper on the question belowSome of the current.docx
Write a one page paper on the question belowSome of the current.docxedgar6wallace88877
 
Write a one page paper (double spaced) describing and discussing the.docx
Write a one page paper (double spaced) describing and discussing the.docxWrite a one page paper (double spaced) describing and discussing the.docx
Write a one page paper (double spaced) describing and discussing the.docxedgar6wallace88877
 
write a one page about this topic and provide a reference.Will.docx
write a one page about this topic and provide a reference.Will.docxwrite a one page about this topic and provide a reference.Will.docx
write a one page about this topic and provide a reference.Will.docxedgar6wallace88877
 
Write a one or more paragraph on the following question below.docx
Write a one or more paragraph on the following question below.docxWrite a one or more paragraph on the following question below.docx
Write a one or more paragraph on the following question below.docxedgar6wallace88877
 
Write a one or more page paper on the following belowWhy are .docx
Write a one or more page paper on the following belowWhy are .docxWrite a one or more page paper on the following belowWhy are .docx
Write a one or more page paper on the following belowWhy are .docxedgar6wallace88877
 
Write a one page dialogue in which two characters are arguing but .docx
Write a one page dialogue in which two characters are arguing but .docxWrite a one page dialogue in which two characters are arguing but .docx
Write a one page dialogue in which two characters are arguing but .docxedgar6wallace88877
 

More from edgar6wallace88877 (20)

Write a page to a page and half for each topic and read each topic a.docx
Write a page to a page and half for each topic and read each topic a.docxWrite a page to a page and half for each topic and read each topic a.docx
Write a page to a page and half for each topic and read each topic a.docx
 
Write a page discussing why you believe PMI is focusing BA as the fi.docx
Write a page discussing why you believe PMI is focusing BA as the fi.docxWrite a page discussing why you believe PMI is focusing BA as the fi.docx
Write a page discussing why you believe PMI is focusing BA as the fi.docx
 
Write a page of personal reflection of your present leadership compe.docx
Write a page of personal reflection of your present leadership compe.docxWrite a page of personal reflection of your present leadership compe.docx
Write a page of personal reflection of your present leadership compe.docx
 
Write a page of compare and contrast for the Big Five Personalit.docx
Write a page of compare and contrast for the Big Five Personalit.docxWrite a page of compare and contrast for the Big Five Personalit.docx
Write a page of compare and contrast for the Big Five Personalit.docx
 
Write a page of research and discuss an innovation that includes mul.docx
Write a page of research and discuss an innovation that includes mul.docxWrite a page of research and discuss an innovation that includes mul.docx
Write a page of research and discuss an innovation that includes mul.docx
 
Write a page answering the questions below.Sometimes projects .docx
Write a page answering the questions below.Sometimes projects .docxWrite a page answering the questions below.Sometimes projects .docx
Write a page answering the questions below.Sometimes projects .docx
 
Write a one-paragraph summary of one of the reading assignments from.docx
Write a one-paragraph summary of one of the reading assignments from.docxWrite a one-paragraph summary of one of the reading assignments from.docx
Write a one-paragraph summary of one of the reading assignments from.docx
 
Write a one-paragraph summary of this article.Riordan, B. C..docx
Write a one-paragraph summary of this article.Riordan, B. C..docxWrite a one-paragraph summary of this article.Riordan, B. C..docx
Write a one-paragraph summary of this article.Riordan, B. C..docx
 
Write a one-paragraph response to the following topic. Use the MLA f.docx
Write a one-paragraph response to the following topic. Use the MLA f.docxWrite a one-paragraph response to the following topic. Use the MLA f.docx
Write a one-paragraph response to the following topic. Use the MLA f.docx
 
Write a one-page rhetorical analysis in which you analyze the argume.docx
Write a one-page rhetorical analysis in which you analyze the argume.docxWrite a one-page rhetorical analysis in which you analyze the argume.docx
Write a one-page rhetorical analysis in which you analyze the argume.docx
 
Write a one pageliterature review of your figure( FIGURE A.docx
Write a one pageliterature review of your figure( FIGURE A.docxWrite a one pageliterature review of your figure( FIGURE A.docx
Write a one pageliterature review of your figure( FIGURE A.docx
 
Write a one page-paper documenting the problemneed you wish to .docx
Write a one page-paper documenting the problemneed you wish to .docxWrite a one page-paper documenting the problemneed you wish to .docx
Write a one page-paper documenting the problemneed you wish to .docx
 
Write a one page report on Chapter 1 and 2 with the same style of mo.docx
Write a one page report on Chapter 1 and 2 with the same style of mo.docxWrite a one page report on Chapter 1 and 2 with the same style of mo.docx
Write a one page report on Chapter 1 and 2 with the same style of mo.docx
 
Write a one page reflection about the following1) Identify .docx
Write a one page reflection about the following1) Identify .docxWrite a one page reflection about the following1) Identify .docx
Write a one page reflection about the following1) Identify .docx
 
Write a one page paper on the question belowSome of the current.docx
Write a one page paper on the question belowSome of the current.docxWrite a one page paper on the question belowSome of the current.docx
Write a one page paper on the question belowSome of the current.docx
 
Write a one page paper (double spaced) describing and discussing the.docx
Write a one page paper (double spaced) describing and discussing the.docxWrite a one page paper (double spaced) describing and discussing the.docx
Write a one page paper (double spaced) describing and discussing the.docx
 
write a one page about this topic and provide a reference.Will.docx
write a one page about this topic and provide a reference.Will.docxwrite a one page about this topic and provide a reference.Will.docx
write a one page about this topic and provide a reference.Will.docx
 
Write a one or more paragraph on the following question below.docx
Write a one or more paragraph on the following question below.docxWrite a one or more paragraph on the following question below.docx
Write a one or more paragraph on the following question below.docx
 
Write a one or more page paper on the following belowWhy are .docx
Write a one or more page paper on the following belowWhy are .docxWrite a one or more page paper on the following belowWhy are .docx
Write a one or more page paper on the following belowWhy are .docx
 
Write a one page dialogue in which two characters are arguing but .docx
Write a one page dialogue in which two characters are arguing but .docxWrite a one page dialogue in which two characters are arguing but .docx
Write a one page dialogue in which two characters are arguing but .docx
 

Recently uploaded

CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxGaneshChakor2
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfJayanti Pande
 
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...Sapna Thakur
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdfQucHHunhnh
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Disha Kariya
 
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxPOINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxSayali Powar
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...EduSkills OECD
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfchloefrazer622
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationnomboosow
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpinRaunakKeshri1
 
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...fonyou31
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Krashi Coaching
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAssociation for Project Management
 
Russian Call Girls in Andheri Airport Mumbai WhatsApp 9167673311 💞 Full Nigh...
Russian Call Girls in Andheri Airport Mumbai WhatsApp  9167673311 💞 Full Nigh...Russian Call Girls in Andheri Airport Mumbai WhatsApp  9167673311 💞 Full Nigh...
Russian Call Girls in Andheri Airport Mumbai WhatsApp 9167673311 💞 Full Nigh...Pooja Nehwal
 

Recently uploaded (20)

INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptxINDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
 
CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptx
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..
 
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxPOINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
 
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpin
 
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across Sectors
 
Russian Call Girls in Andheri Airport Mumbai WhatsApp 9167673311 💞 Full Nigh...
Russian Call Girls in Andheri Airport Mumbai WhatsApp  9167673311 💞 Full Nigh...Russian Call Girls in Andheri Airport Mumbai WhatsApp  9167673311 💞 Full Nigh...
Russian Call Girls in Andheri Airport Mumbai WhatsApp 9167673311 💞 Full Nigh...
 

Sheet1Amys One Day Food RecallHeight 5 ft 8 inchesAge 19Weight.docx

  • 1. Sheet1Amy's One Day Food RecallHeight: 5 ft 8 inchesAge: 19Weight: 134 lbsGender: FemaleFood DescriptionQuantitycarbohydrate (g)protein (g)Fat (g)Saturated fat (g)Cholesterol (mg)Fiber (g)Sodium (mg)potassium (mg)CaloriesToasted multigrain bread1 slice12410021086573Creamy peanut butter with added salt2 Tbsp7716302136179200BananaOne100031435104Garlic hummus3 Tbsp748103192140116Baby carrots7 sticks9100038224940Salted pretzels15 twists482002744134234Cooked white Jasmine rice (no oil)1 cup4640001255200Seared filet of salmon3 oz0236248045387Raw shredded romaine lettuce1 cup20000141168Feta cheese crumbled1 oz14425017089374Raw cherry tomatoes whole6 small tomatoes410001524220Vinaigrette2 Tbsps4061002922570Raw cucumber sliced with peel½ cup2000001768Lindt dark chocolate 70% cocoa2 squares1116421300Black coffee1 cup01000021244Granulated sugar1 Tsp4000000016Whole milk1 cup1285240105322152 Source/Assg13/assg-13.cppSource/Assg13/assg-13.cpp/** * * * @description Assignment 13 Dictionaries and Hash table * implementations. */ #include<cassert> #include<iostream> #include"KeyValuePair.hpp" #include"Employee.hpp" #include"HashDictionary.hpp" usingnamespace std;
  • 2. /** main * The main entry point for this program. Execution of this pro gram * will begin with this main function. * * @param argc The command line argument count which is the number of * command line arguments provided by user when they starte d * the program. * @param argv The command line arguments, an array of chara cter * arrays. * * @returns An int value indicating program exit status. Usuall y 0 * is returned to indicate normal exit and a non-zero value * is returned to indicate an error condition. */ int main(int argc,char** argv) { // ----------------------------------------------------------------------- cout <<"----- testing Employee record and KeyValuePair class ----------- "<< endl; KeyValuePair<int, string> pair(42,"blue"); cout <<"test key: "<< pair.key()<< endl; assert(pair.key()==42); cout <<"test value: "<< pair.value()<< endl; assert(pair.value()=="blue"); int id =3; Employee e(id,"Derek Harter","1234 Main Street, Commerce T X",12345.67);
  • 3. cout << e << endl; assert(e.getId()==3); assert(e.getName()=="Derek Harter"); cout << endl; // ----------------------------------------------------------------------- cout <<"-------------- testing quadratic probing ------------------ -----"<< endl; constint TABLE_SIZE =7; HashDictionary<int,Employee> dict(TABLE_SIZE, EMPTY_E MPLOYEE_ID); cout <<"Newly created hash dictionary should be empty, size: "<< dict.size()<< endl; assert(dict.size()==0); int probeIndex =0; //cout << "probe index: " << probeIndex // << " returned probe value: " << dict.probe(id, probeIndex) // << endl; //assert(dict.probe(id, probeIndex) == 2); probeIndex =1; //cout << "probe index: " << probeIndex // << " returned probe value: " << dict.probe(id, probeIndex) // << endl; //assert(dict.probe(id, probeIndex) == 5); probeIndex =5; //cout << "probe index: " << probeIndex // << " returned probe value: " << dict.probe(id, probeIndex) // << endl; //assert(dict.probe(id, probeIndex) == 37); cout << endl;
  • 4. // ----------------------------------------------------------------------- cout <<"-------------- testing mid-square hashing --------------- -------"<< endl; // the following asserts will only work for 32 bit ints, leave asse rts // commented out if you have 64 bit asserts cout <<"Assuming 32 bit (4 byte) ints for these tests: "<<sizeo f(int)<< endl; assert(sizeof(int)==4); //id = 3918; //cout << "hash key: " << id // << " returned hash value: " << dict.hash(id) // << endl; //assert(dict.hash(id) == 1); //id = 48517; //cout << "hash key: " << id // << " returned hash value: " << dict.hash(id) // << endl; //assert(dict.hash(id) == 6); //id = 913478; //cout << "hash key: " << id // << " returned hash value: " << dict.hash(id) // << endl; //assert(dict.hash(id) == 5); //id = 8372915; //cout << "hash key: " << id // << " returned hash value: " << dict.hash(id) // << endl; //assert(dict.hash(id) == 4); // test that the distribution of the hash values
  • 5. // over the possible slots/buckets looks relatively // evenly distributed int counts[TABLE_SIZE]={0}; //for (id = 0; id < 1000000; id++) //{ // int hash = dict.hash(id); // counts[hash]++; //} // display results int sum =0; for(int slot =0; slot < TABLE_SIZE; slot++) { cout <<"counts for slot["<< slot <<"] = " << counts[slot]<< endl; sum = sum + counts[slot]; } // spot check results //assert(sum == 1000000); //assert(counts[0] == 143055); //assert(counts[6] == 142520); cout << endl; // ----------------------------------------------------------------------- cout <<"-------------- testing dictionary insertion --------------- -----"<< endl; id =438901234; //dict.insert(id, Employee(id, "Derek Harter", "123 Main St. Co mmerce TX", 58.23)); id =192834192; //dict.insert(id, Employee(id, "Alice White", "384 Bois'darc. Ca mpbell TX", 45.45)); id =998439281; //dict.insert(id, Employee(id, "Bob Green", "92 Washington Apt . 5 Greenville TX", 16.00));
  • 6. id =362817371; //dict.insert(id, Employee(id, "Carol Black", "8913 FM 24 Coop er TX", 28.50)); cout <<"After inserting "<< dict.size()<<" employees:"<< endl ; cout << dict << endl; // spot check that hash table entries were correctly performed //assert(dict.size() == 4); //assert(dict[3].key() == 192834192); //assert(dict[3].value().getName() == "Alice White"); //assert(dict[1].key() == 438901234); //assert(dict[1].value().getName() == "Derek Harter"); cout << endl; // ----------------------------------------------------------------------- cout <<"-------------- testing dictionary search ------------------ -----"<< endl; id =438901234; //e = dict.find(id); //cout << "Search for id: " << id << endl; //cout << " Found employee: " << e << endl; //assert(e.getId() == id); //assert(e.getName() == "Derek Harter"); id =362817371; //e = dict.find(id); //cout << "Search for id: " << id << endl; //cout << " Found employee: " << e << endl; //assert(e.getId() == id); //assert(e.getName() == "Carol Black"); id =239481432; //e = dict.find(id); //cout << "Unsuccessful Search for id: " << id << endl;
  • 7. //cout << " Found employee: " << e << endl; //assert(e.getId() == EMPTY_EMPLOYEE_ID); //assert(e.getName() == ""); cout << endl; // return 0 to indicate successful completion return0; } Source/Assg13/assg13.pdf Assg 13: Dictionaries and Hashing COSC 2336 Spring 2019 April 18, 2019 Dates: Due: Sunday May 05, by Midnight Objectives • More practice with using class templates • Learn about implementing and using key/value pair Dictionary ab- straction • Implement and learn about some basic hashing techniques, like mid- square hasing and quadratic probing for closed hashing schemes.
  • 8. Description In this assignment you will be implementing some basic mechanisms of a hash table to implement a Dictionary that uses hashing to store and search for items in its collection. You have been given many files for this assign- ment. I have provided an Employee class in "Employee.[hpp|cpp]" and a KeyValuePair class in "KeyValuePair.[hpp|cpp]". You will not need to make any changes to these files or classes, they should work as given for this as- signment. You will be adding and implementing some member functions to the HashDictionary class. The initial "HashDictionary.[hpp|cpp]" file contains a constructor and destructor for a HashDictionary as well as some other accessors and operators already implemented that are used for testing. You will be implementing a closed hash table mechanism using quadratic probing of the slots. You will also implement a version of the mid-square 1 hashing function described in our textbook (Shaffer section
  • 9. 9.4.3 on closed hashing mechinsms). For this assignment you need to perform the following tasks. 1. Your first task is to implement methods to define the probe sequence for closed hasing. Add a member function named probe() to the HashDictionary class. Be aware that the HashDictionary class is a templatized on <Key, Value> templates, thus when you implement the class methods you need to templatize the class methods correctly. You can look at the example implementations of size() and the con- structors to remind yourself how to do this correctly. In any case, probe() is a member function that takes two parameters, a Key and an integer index value. We are not using secondary hashing (as described in our textbook) so the Key value will actually not be used in your function. However, keep it as a parameter as the gen- eral abstraction/API for the probe function should include it for cases where secondary hashing is used. probe() should be a const class member function, as calling it does not change the dictionary. Finally probe() will return an ineger as its result. Your probe() funciton should implement a quadratic probing scheme as described in our Shaffer textbook section 9.4.3 on pg. 338.
  • 10. Use c1 = 1, c2 =2, c3 = 2 as the parameters for your quadratic probe (the tests of probe() assume your probe sequence is using these pa- rameter values for the quadratic function). 2. You second tasks is to implement a hash function for integer like keys using the described mid-square hasing function (Shaffer 9.4.1 Example 9.6 pg. 327). We will create a slight variation of this algorithm for our hashing dictionary. First of all the hash() member functions should take a Key as its only input parameter, and it will then return a regular int as its result. Since this is a hash function, the integer value should be in the range 0 - tableSize-1, so don’t forget to mod by the tableSize before returning your hash result. hash() should work like this. First of all, you should square the key value that is passed in. Then, assuming we are working with a 32 bit int, we want to only keep the middle 16 bits of the square of the key to use for our hash. There are many ways to work with and get the bits you need, but most likely you will want to use C bitwise operators to do this. For example, a simple method to get the middle 16 bits is 2
  • 11. to first mask out the upper 8 bits using the bitwise & operator (e.g. key & 0x00FFFFFF) will mask out the high order 8 bits to 0). Then once you have removed the upper most significant 8 bits, you can left shift the key by 8 bits, thus dropping out the lower least significant 8 bits (e.g. key >> 8). Performing a mask of the upper 8 bits and shifting out the lower 8 bits will result in you only retaining the middle 16 bits. If your system is using 64 bit integers rather than 32 bit integers, perform the mid-square method but retain the middle 32 bits of the result. You can use the sizeof(int) method to determine how many bytes are in an int on your system. I will give a bonus point if you write your hash() function to correctly work for both 32 and 64 bit values by testing sizeof(int) and doing the appopriate work to get the middle bits. Again after you square the key and get the middle bits, make sure you modulo the result to get an actual has index in the correct range. 3. The third task is to add the insert()method to your HashDictionary so that you can insert new key/value pairs into the dictionary.
  • 12. insert() should take a constant Key reference and a constant Value reference as its input parameters (note that both of these parameters should be declared as const, and they should both be reference pa- rameters, so use the & to indicate they are passed by reference). Your insert() function does not return a result, so it will be a void func- tion. The algorithm for insert is described in Shaffer 9.4.3 on pg. 334. You need to call and use the probe() and hash() funciton you created in the first 2 steps to correctly define/implement your closed hashing probe sequence. The basica algorithm is that you use hash() to de- termine the initial home slot, and probe() gives an offset you should add. Basically you have to search the hashTable using the probe se- quence until you find an empty slot. Once you find an empty slot, you should create a new instance of a KeyValuePair<Key, Value> object, that contains the key and value that were provided as input param- eters to your insert() function. This KeyValuePair instance should then be inserted into the table at the location where you find the first empty slot on the probe sequence. Also don’t forget to update the valueCount paramemter of the HashDictionary class that keeps
  • 13. track of the number of items currently in the dictionary. 3 4. Finally you will also implement the find() method to search for a particular key in your dictionary. The find() member function taks a single Key parameter as input (it should be a const Key& reference parameter). The find() functin will return a Value as a result, which will be the Value of the record associated with the given Key if it was found in the dictionary, or an empty Value() object if it was not found. The find() method uses the same probe sequence as insert() imple- mented by your probe() and hash() methods. So you should again search along the probe sequence, until you either find the key you were given to search for, or else find an empty slot. Then at the end, if you found the key in the hashTable you should return the value that corresponds to the key that was searched for. If the search failed and you found an empty slot on your probe sequence, you should instead return an empty Value() object, which is used as an indicator for a
  • 14. failed search. In this assignment you will be given a lot of starting code. As usual, there is an "assg-13.cpp" file which contains commented out tests of the code/functions you are to write. You have been given and "Em- ployee.[hpp|cpp]" file containing a simple definition of a (non- templated) class/record that holds a few pieces of information about a theoretical Employee. We use this class to create a hash dictionary for testing with the employee id as the key, and the Employee record as the associated value in our Dictionary. You have also been given a template class in the file "KeyValuePair.[hpp|cpp]". This contains a templatized container to holding a key/value pair of items. You will not need to add any code or make any changes in the Employee or KeyValuePair class files. You have also been given a "HashDictionary.[hpp|cpp]" file containing beginning defintions of a HashDictionary class. The member functions you need to add for this assignment should be added to these files. Here is an example of the output you should get if your code is passing all of the tests and is able to run the simulation. You may not get the exact same statistics for the runSimulation() output, as the simulation is generating random numbers, but you should see similar values.
  • 15. ----- testing Employee record and KeyValuePair class ----------- test key: 42 test value: blue ( id: 3, Derek Harter, 1234 Main Street, Commerce TX, 12345.67 ) 4 -------------- testing quadratic probing ----------------------- Newly created hash dictionary should be empty, size: 0 probe index: 0 returned probe value: 2 probe index: 1 returned probe value: 5 probe index: 5 returned probe value: 37 -------------- testing mid-square hashing ---------------------- Assuming 32 bit (4 byte) ints for these tests: 4 hash key: 3918 returned hash value: 1 hash key: 48517 returned hash value: 6 hash key: 913478 returned hash value: 5 hash key: 8372915 returned hash value: 4 counts for slot[0] = 143055 counts for slot[1] = 143040 counts for slot[2] = 143362 counts for slot[3] = 142399 counts for slot[4] = 142966 counts for slot[5] = 142658 counts for slot[6] = 142520 -------------- testing dictionary insertion -------------------- After inserting 4 employees: Slot: 0 Key : 362817371
  • 16. Value: ( id: 362817371, Carol Black, 8913 FM 24 Cooper TX, 28.50 ) Slot: 1 Key : 438901234 Value: ( id: 438901234, Derek Harter, 123 Main St. Commerce TX, 58.23 ) Slot: 2 Key : 0 Value: ( id: 0, , , 0.00 ) Slot: 3 Key : 192834192 Value: ( id: 192834192, Alice White, 384 Bois'darc. Campbell TX, 45.45 ) Slot: 4 5 Key : 998439281 Value: ( id: 998439281, Bob Green, 92 Washington Apt. 5 Greenville TX, 16.00 ) Slot: 5 Key : 0 Value: ( id: 0, , , 0.00 ) Slot: 6 Key : 0 Value: ( id: 0, , , 0.00 ) -------------- testing dictionary search -----------------------
  • 17. Search for id: 438901234 Found employee: ( id: 438901234, Derek Harter, 123 Main St. Commerce TX, 58.23 ) Search for id: 362817371 Found employee: ( id: 362817371, Carol Black, 8913 FM 24 Cooper TX, 28.50 ) Unsuccessful Search for id: 239481432 Found employee: ( id: 0, , , 0.00 ) Assignment Submission A MyLeoOnline submission folder has been created for this assignment. You should attach and upload your completed "HashDictionary.[hpp|cpp]" source files to the submission folder to complete this assignment. You do not need to submit your "assg-13.cpp" file with the tests, nor the Employee or KeyVal- uePair files, since you should not have made changes to any of these (except to uncomment out the tests in assg-13.cpp). Please only submit the asked for source code files, I do not need your build projects, executables, project files, etc. 6 Requirements and Grading Rubrics
  • 18. Program Execution, Output and Functional Requirements 1. Your program must compile, run and produce some sort of output to be graded. 0 if not satisfied. 2. (20 pts.) probe() member function implemented. Function is using quadratic probing as asked for, with correct values for c1, c2 and c3 parameters. Probe sequence appears correct and passes tests. 3. (20 pts.) hash() member function implemented correctly. Function implements the mid-square method as described. Function correctly uses only the 16 middle bits if system uses 32 bit integers. 4. (30 pts.) insert() member function implemented and working. Func- tion appears to be correctly generating probe sequence using the probe() and hash() functions. Items are correctly inserted into ex- pected location in the hash table. 5. (30 pts.) find()member function implemented and working. Function appears to be also correctly using the probe sequence in the same was as insert(). Function passes the expected tests. Program Style Your programs must conform to the style and formatting guidelines given for this class. The following is a list of the guidelines that are
  • 19. required for the assignment to be submitted this week. 1. Most importantly, make sure you figure out how to set your indentation settings correctly. All programs must use 2 spaces for all indentation levels, and all indentation levels must be correctly indented. Also all tabs must be removed from files, and only 2 spaces used for indentation. 2. A function header must be present for member functions you define. You must give a short description of the function, and document all of the input parameters to the function, as well as the return value and data type of the function if it returns a value for the member functions, just like for regular functions. However, setter and getter methods do not require function headers. 7 3. You should have a document header for your class. The class header document should give a description of the class. Also you should doc- ument all private member variables that the class manages in the class document header.
  • 20. 4. Do not include any statements (such as system("pause") or inputting a key from the user to continue) that are meant to keep the terminal from going away. Do not include any code that is specific to a single operating system, such as the system("pause") which is Microsoft Windows specific. 8 Source/Assg13/Employee.cppSource/Assg13/Employee.cpp/** * @description Simple example of an Employee record/class * we can use to demonstrate HashDictionary key/value pair * management. */ #include<string> #include<iostream> #include<iomanip> #include<sstream> #include"Employee.hpp" usingnamespace std; /** constructor * Default constructor for our Employee record/class. Construct an * empty employee record */ Employee::Employee() { this->id = EMPTY_EMPLOYEE_ID; this->name ="";
  • 21. this->address =""; this->salary =0.0; } /** constructor * Basic constructor for our Employee record/class. */ Employee::Employee(int id, string name, string address,float sal ary) { this->id = id; this->name = name; this->address = address; this->salary = salary; } /** id accessor * Accessor method to get the employee id. * * @returns int Returns the integer employee id value. */ intEmployee::getId()const { return id; } /** name accessor * Accessor method to get the employee name. * * @returns string Returns the string containing the full * employee name for this record. */ string Employee::getName()const
  • 22. { return name; } /** overload operator<< * Friend function to ouput representation of Employee to an * output stream. * * @param out A reference to an output stream to which we sho uld * send the representation of an employee record for display. * @param employee The reference to the employee record to be displayed. * * @returns ostream& Returns a reference to the original output * stream, but now the employee information should have been * inserted into the stream for display. */ ostream&operator<<(ostream& out,Employee& employee) { //out << "Employee id: " << employee.id << endl // << " name : " << employee.name << endl // << " address: " << employee.address << endl // << " salary : " << fixed << setprecision(2) << employee.s alary << endl; out <<"( id: "<< employee.id <<", " << employee.name <<", " << employee.address <<", " << fixed << setprecision(2)<< employee.salary <<" )"<< endl; return out; } Source/Assg13/Employee.hpp
  • 23. /** * @description Simple example of an Employee record/class * we can use to demonstrate HashDictionary key/value pair * management. */ #include <string> #include <iostream> using namespace std; #ifndef EMPLOYEE_HPP #define EMPLOYEE_HPP // This should really be a class constant, however this // global constant represents a flag that is used to // indicate empty slots and/or failed search. const int EMPTY_EMPLOYEE_ID = 0; /** Employee * A simple Employee class/record to demonstrate/test * our hashing dictionary assignment. * NOTE: we are using 0 as a flag to represent an unused * slot or an invalid/empty employee. This is used/assumed * by our dictionary class to determine if a slot is empty * and/or to give a failure result for a failed search. */ class Employee { private: int id; string name; string address; float salary;
  • 24. public: Employee(); Employee(int id, string name, string address, float salary); int getId() const; string getName() const; friend ostream& operator<<(ostream& out, Employee& employee); }; #endif // EMPLOYEE_HPP Source/Assg13/HashDictionary.cppSource/Assg13/HashDictiona ry.cpp/** * @description Template class for definining a dictionary * that uses a hash table of KeyValuePair items. * Based on Shaffer hashdict implementation pg. 340 */ /** constructor * Standard constructor for the HashDictionary * * @param tableSize The size of the hash table that should be * generated for internal use by this dictionary for hasing. * @param emptyKey A special flag/value that can be used to d etect * invalid/unused keys. We need this so we can indicate which * slots/buckets in our hash table are currently empty, and also * this value is used as a return result when an unsuccessful * search is performed on the dictionary. */ template<classKey,classValue>
  • 25. HashDictionary<Key,Value>::HashDictionary(int tableSize,Key emptyKey) { this->tableSize = tableSize; this->EMPTYKEY = emptyKey; valueCount =0; // allocate an array/table of the indicated initial size hashTable =newKeyValuePair<Key,Value>[tableSize]; // initialize the hash table so all slots are initially empty for(int index =0; index < tableSize; index++) { hashTable[index].setKey(EMPTYKEY); } } /** destructor * Standard destructor for the HashDictionary. Be good memor y managers and * free up the dynamically allocated array of memory pointed to by hashTable. */ template<classKey,classValue> HashDictionary<Key,Value>::~HashDictionary() { delete[] hashTable; } /** size * Accessor method to get the current size of this dictionary, * e.g. the count of the number of key/value pairs currently bein g * managed in our hash table.
  • 26. * * @returns in Returns the current number of items being manag ed by * this dictionary and currently in our hashTable. */ template<classKey,classValue> intHashDictionary<Key,Value>::size()const { return valueCount; } // Place your implementations of the class methods probe(), has h(), // insert() and find() here /** overload indexing operator[] * Overload indexing operator[] to provide direct access * to hash table. This is not normally part of the Dictionary * API/abstraction, but included here for testing. * * @param index An integer index. The index should be in the r ange 0 - tablesize-1. * * @returns KeyValuePair<> Returns a KeyValuePair object if t he index into the * internal hash table is a valid index. This method throws an exception if * the index is not a valid slot of the hash table. */ template<classKey,classValue> KeyValuePair<Key,Value>&HashDictionary<Key,Value>::oper ator[](int index)
  • 27. { if(index <0|| index >= tableSize) { cout <<"Error: <HashDictionary::operator[] invalid index: " << index <<" table size is currently: " << tableSize << endl; assert(false); } return hashTable[index]; } /** HashDictionary output stream operator * Friend function for HashDictionary. We normally wouldn't h ave * something like this for a Dictionary or HashTable, but for tes ting * and learning purposes, we want to be able to display the cont ents of * each slot in the hash table of a HashDictionary container. * * @param out An output stream reference into which we should insert * a representation of the given HashDictionary. * @param aDict A HashDictionary object that we want to displ ay/represent * on an output stream. * * @returns ostream& Returns a reference to the original given output stream, * but now the values representing the dictionary we were give n should * have been sent into the output stream. */ template<typename K,typename V>
  • 28. ostream&operator<<(ostream& out,constHashDictionary<K, V> & aDict) { for(int slot =0; slot < aDict.tableSize; slot++) { out <<"Slot: "<< slot << endl; out <<" Key : "<< aDict.hashTable[slot].key()<< endl; out <<" Value: "<< aDict.hashTable[slot].value()<< endl; } out << endl; return out; } Source/Assg13/HashDictionary.hpp /** * @description Template class for definining a dictionary * that uses a hash table of KeyValuePair items. * Based on Shaffer hashdict implementation pg. 340 */ #include <cassert> #include <iostream> #include "KeyValuePair.hpp" using namespace std; #ifndef HASHDICTIONARY_HPP #define HASHDICTIONARY_HPP /** HashDictionary * An implementation of a dictionary that uses a hash table to insert, search * and delete a set of KeyValuePair items. In the assignment,
  • 29. we will be * implementing a closed hashing table with quadratic probing. The hash function * will implement a version of the mid-square hasing function described in * our Shaffer textbook. * * @value hashTable An array of KeyValuePair items, the hash table this class/container * is managing. * @value tableSize The actual size of the hashTable array * @value valueCount The number of KeyValuePair items that are currently being * managed and are contained in the hashTable * @value EMPTYKEY A special user-supplied key that can be used to indicate empty * slots. Since how we determine what is a valid/invalid key will depend on the * key type, the user must supply this special flag/value when setting up the * hash dictionary. */ template <class Key, class Value> class HashDictionary { protected: KeyValuePair<Key, Value>* hashTable; // the hash table int tableSize; // the size of the hash table, e.g. symbol M from textbook int valueCount; // the count of the number of value items currently in table Key EMPTYKEY; // a special user-supplied key that can be used to indicate empty slots public: // constructors and destructors
  • 30. HashDictionary(int tableSize, Key emptyKey); ~HashDictionary(); // accessor methods int size() const; // searching and insertion // all 4 of the methods you were required to create for this // assignment should have appropriate class method signatures // defined here. // overload operators (mostly for testing) KeyValuePair<Key, Value>& operator[](int index); template <typename K, typename V> friend ostream& operator<<(ostream& out, const HashDictionary<K, V>& aDict); }; #include "HashDictionary.cpp" #endif // HASHDICTIONARY_HPP Source/Assg13/KeyValuePair.cppSource/Assg13/KeyValuePair. cpp/** * @description Template class for definining Key/Value pairs, * suitable for dictionary and hash table implementations. * Based on Shaffer KVPair ADT definition, pg. 139 Fig 4.31. */ /** constructor * Default constructor for a KeyValuePair. */
  • 31. template<classKey,classValue> KeyValuePair<Key,Value>::KeyValuePair() { } /** constructor * Standard constructor for a KeyValuePair. * * @param key The key portion that is to be stored in this pair. * @param value The value portion that is to be stored in this pa ir. */ template<classKey,classValue> KeyValuePair<Key,Value>::KeyValuePair(Key key,Valuevalue) { this->myKey = key; this->myValue =value; } /** key accessor * Accessor method to get and return the key for this key/value pair * * @returns Key Returns an object of template type Key, which is the * key portion of the pair in this container. */ template<classKey,classValue> KeyKeyValuePair<Key,Value>::key() { return myKey; }
  • 32. /** key setter * Accessor method to set the key for this key/value pair * * @param key The new value to update the key to for this pair. */ template<classKey,classValue> voidKeyValuePair<Key,Value>::setKey(Key key) { this->myKey = key; } /** value accessor * Accessor method to get and return the value for this key/valu e pair. * * @returns Value& Returns a reference to the value object in th is * key value pair container. */ template<classKey,classValue> Value&KeyValuePair<Key,Value>::value() { return myValue; } Source/Assg13/KeyValuePair.hpp /** * @description Template class for definining Key/Value pairs, * suitable for dictionary and hash table implementations. * Based on Shaffer KVPair ADT definition, pg. 139 Fig 4.31. */
  • 33. #ifndef KEYVALUEPAIR_HPP #define KEYVALUEPAIR_HPP /** KeyValue Pair * Definition of basic key/value pair container. This container of course * associates a value (usually a record like a class or struct), with * a key (can be anything). * * We do not use the comparator Strategy pattern as discussed in * Shaffer pg. 144 here. We assume that the Key type has suitably * overloaded operators for <, >, ==, <=, >= operations as needed * in order to compare and order keys if needed by dictionaries and * hash tables using a KeyValuePair. * * @value key The key for a key/value pair item/association. * @value value The value for a key/value pair, usually something like * a record (a class or struct of data we are hashing or keeping in * a dictionary). */ template <class Key, class Value> class KeyValuePair { private: Key myKey; Value myValue;
  • 34. public: // constructors KeyValuePair(); KeyValuePair(Key key, Value value); // accessors, getters and setters Key key(); void setKey(Key key); Value& value(); }; #include "KeyValuePair.cpp" #endif // KEYVALUEPAIR_HPP