C++ Hashing Problem Database file: Superhero Database https://raw.githubusercont
ID: 3731791 • Letter: C
Question
C++ Hashing Problem
Database file: Superhero Database
https://raw.githubusercontent.com/irawoodring/263/master/assignments/marvel-wikia-data.csv
For this project you are tasked with creating a hashmap class. It can be generic if you like (probably easier to write it that way), or you can write it specifically to house objects of type Superhero .A Superhero has the following fields int page_id; std::string name; std::string urlslug; std::string id; std::string alignment: char eye_color; char hair_color; char sex; std::string gsm; boolean alive; int appearances; std::string first appearance; int year; As per object oriented best practices all fields should be private Your hashmap class should hash based on the entire name of the superhero. You will use the separate chaining method to handle collisions (each array indice will correspond to a vector object where the data will be stored). Your hashmap will provide only the following public methods boolean insert (const Superhero & s); Superhero & get(const std::string name); The insert function returns either true or false depending on whether a collision occurred on insert. Regardless of whether a collision occurred or not the object should be inserted in the vector. Additionally, as we discussed in class, the object should be added to the front of the vector.Explanation / Answer
main.cpp
#include <vector>
#include <fstream>
#include <string>
#include <iostream>
#include <sstream>
#include "Superhero.h"
int main(int argc, char** argv){
std::ifstream in{"marvel-wikia-data.csv"};
std::vector<Superhero>* heroDB = new std::vector<Superhero>;
if(not in){
std::perror("File Error");
return 0;
}
std::string input;
//Get rid of the first line
std::getline(in,input);
while(std::getline(in,input)){
std::string params[13];
std::stringstream data(input);
for(int i(0); i < 13; i++)
std::getline(data, params[i], ',');
int page_id = std::stoi(params[0]);
const std::string name(params[1]);
const std::string urlslug(params[2]);
const std::string id(params[3]);
const std::string alignment(params[4]);
char eye_color('V');
if(!params[5].empty())
eye_color = params[5].at(0);
char hair_color('V');
if(!params[6].empty())
hair_color = params[6].at(0);
char sex('U');
if(!params[7].empty())
sex = params[7].at(0);
const std::string gsm(params[8]);
int appearances(1);
if(!params[10].empty())
appearances = std::stoi(params[10]);
const std::string first_apperance(params[11]);
int year(0);
if(!params[12].empty())
year = std::stoi(params[12]);
bool alive(true);
if(params[9].at(0) == 'D')
alive = false;
Superhero hero(page_id, name, urlslug, id, alignment, eye_color,
hair_color, sex, gsm, alive, appearances, first_apperance, year);
heroDB->push_back(hero);
}
for(auto hero_it(heroDB->begin()); hero_it < heroDB->end(); hero_it++){
Superhero output(*hero_it);
std::cout << output.toString() << std::endl;
}
}
Superhero.cpp
#include <string>
#include <sstream>
#include "Superhero.h"
Superhero::Superhero(int page_id, const std::string &name, const std::string &urlslug, const std::string &id,
const std::string &alignment, char eye_color, char hair_color, char sex, const std::string &gsm,
bool alive, int appearances, const std::string &first_apperance, int year) :
page_id(page_id), name(name),urlslug(urlslug), id(id), alignment(alignment), eye_color(eye_color),
hair_color(hair_color), sex(sex), gsm(gsm), alive(alive), appearances(appearances), first_apperance(first_apperance),
year(year) {}
std::string Superhero:: toString(){
return name;
}
//void Superhero::setPageID(int &page_id){
// Superhero::page_id = page_id;
//}
//
//int Superhero::getPageID() const{
// return page_id;
//}
//void Superhero::setName(std::string &name){
// Superhero::name = name;
//}
//
//std::string Superhero::getName() const{
// return name;
//}
//
//void Superhero::setUrlSlug(std::string &urlslug){
// Superhero::urlslug = urlslug;
//}
//
//std::string Superhero::getUrlSlug() const{
// return urlslug;
//}
//
//void Superhero::setID(std::string &id){
// Superhero::id = id;
//}
//
//std::string Superhero::getID() const{
// return id;
//}
//
//void Superhero::setAlighment(std::string &alignment){
// Superhero::alignment = alignment;
//}
//
//std::string Superhero::getAlignment() const{
// return alignment;
//}
//
//void Superhero::setEyeColor(char &eye_color){
// Superhero::eye_color = eye_color;
//}
//
//char Superhero::getEyeColor() const{
// return eye_color;
//}
//
//void Superhero::getHairColor(char &hair_color){
// Superhero::hair_color = hair_color;
//}
//
//char Superhero::getHairColor() const{
// return hair_color;
//}
//
//void Superhero::setSex(char &sex){
// Superhero::sex = sex;
//}
//
//char Superhero::getSex() const{
// return sex;
//}
//
//void Superhero::setGSM(std::string &gsm){
// Superhero::gsm = gsm;
//}
Superhero.h
#ifndef __H_SUPERHERO_
#define __H_SUPERHERO_
#include <string>
class Superhero{
public:
Superhero(int page_id, const std::string &name, const std::string &urlslug, const std::string &id,
const std::string &alignment, char eye_color, char hair_color, char sex, const std::string &gsm,
bool alive, int appearances, const std::string &first_apperance, int year);
std::string toString();
// void setPageID(int &page_id);
// int getPageID() const;
// void setName(std::string &name);
// std::string getName() const;
// void setUrlSlug(std::string &urlslug);
// std::string getUrlslug() const;
// void setID(std::string &id);
// std::string getID() const;
// void setAlignment(std::string &alignment);
// std::string getAlignment() const;
// void setEyeColor(char &eye_color);
// char getEyeColor() const;
// void setHairColor(char &hair_color);
// char getHairColor() const;
// void setSex(char &sex);
// char getSex() const; //should this be changed to be less dirty?
// void setGSM(std::string &gsm);
// std::string getGSM() const;
// void setAlive(bool &alive);
// bool getAlive() const;
// void setApperances(int &appearances);
// int getApperances() const;
// void setFirstApperance(std::string &first_apperance);
// std::string getFristApperance() const;
// void setYear(int &year);
// int getYear() const;
private:
int page_id;
std::string name;
std::string urlslug;
std::string id;
std::string alignment;
char eye_color;
char hair_color;
char sex;
std::string gsm;
bool alive;
int appearances;
std::string first_apperance;
int year;
};
#endif
one.text
page_id,name,urlslug,ID,ALIGN,EYE,HAIR,SEX,GSM,ALIVE,APPEARANCES,FIRST APPEARANCE,Year
1678,Spider-Man (Peter Parker),/Spider-Man_(Peter_Parker),Secret Identity,Good Characters,Hazel Eyes,Brown Hair,Male Characters,,Living Characters,4043,Aug-62,1962
7139,Captain America (Steven Rogers),/Captain_America_(Steven_Rogers),Public Identity,Good Characters,Blue Eyes,White Hair,Male Characters,,Living Characters,3360,Mar-41,1941
64786,"Wolverine (James ""Logan"" Howlett)",/Wolverine_(James_%22Logan%22_Howlett),Public Identity,Neutral Characters,Blue Eyes,Black Hair,Male Characters,,Living Characters,3061,Oct-74,1974
1868,"Iron Man (Anthony ""Tony"" Stark)",/Iron_Man_(Anthony_%22Tony%22_Stark),Public Identity,Good Characters,Blue Eyes,Black Hair,Male Characters,,Living Characters,2961,Mar-63,1963
2460,Thor (Thor Odinson),/Thor_(Thor_Odinson),No Dual Identity,Good Characters,Blue Eyes,Blond Hair,Male Characters,,Living Characters,2258,Nov-50,1950
2458,Benjamin Grimm (Earth-616),/Benjamin_Grimm_(Earth-616),Public Identity,Good Characters,Blue Eyes,No Hair,Male Characters,,Living Characters,2255,Nov-61,1961
2166,Reed Richards (Earth-616),/Reed_Richards_(Earth-616),Public Identity,Good Characters,Brown Eyes,Brown Hair,Male Characters,,Living Characters,2072,Nov-61,1961
1833,Hulk (Robert Bruce Banner),/Hulk_(Robert_Bruce_Banner),Public Identity,Good Characters,Brown Eyes,Brown Hair,Male Characters,,Living Characters,2017,May-62,1962
29481,Scott Summers (Earth-616),/Scott_Summers_(Earth-616),Public Identity,Neutral Characters,Brown Eyes,Brown Hair,Male Characters,,Living Characters,1955,Sep-63,1963
1837,Jonathan Storm (Earth-616),/Jonathan_Storm_(Earth-616),Public Identity,Good Characters,Blue Eyes,Blond Hair,Male Characters,,Living Characters,1934,Nov-61,1961
15725,Henry McCoy (Earth-616),/Henry_McCoy_(Earth-616),Public Identity,Good Characters,Blue Eyes,Blue Hair,Male Characters,,Living Characters,1825,Sep-63,1963
1863,Susan Storm (Earth-616),/Susan_Storm_(Earth-616),Public Identity,Good Characters,Blue Eyes,Blond Hair,Female Characters,,Living Characters,1713,Nov-61,1961
7823,Namor McKenzie (Earth-616),/Namor_McKenzie_(Earth-616),No Dual Identity,Neutral Characters,Green Eyes,Black Hair,Male Characters,,Living Characters,1528,,
2614,Ororo Munroe (Earth-616),/Ororo_Munroe_(Earth-616),Public Identity,Good Characters,Blue Eyes,White Hair,Female Characters,,Living Characters,1512,May-75,1975
1803,Clinton Barton (Earth-616),/Clinton_Barton_(Earth-616),Public Identity,Good Characters,Blue Eyes,Blond Hair,Male Characters,,Living Characters,1394,Sep-64,1964
1396,Matthew Murdock (Earth-616),/Matthew_Murdock_(Earth-616),Public Identity,Good Characters,Blue Eyes,Red Hair,Male Characters,,Living Characters,1338,Apr-64,1964
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.