http://www.stroustrup.com/Programming/PPP2code/std_lib_facilities.h
Chapter 9 // Exercise 1
Design and implement a Name_pairs class holding (name, age) pairs where name is a string and age is a double. Represent that as a vector<string> (called name) and a vector<double> (called age) member. Provide an input operation read_names() that reads a series of names. Provide a read_ages() operation that prompts the user for an age for each name. Provide a print() operation that prints out the (name[i], age[i]) pairs (one per line) in the order determined by the name vector. Provide a sort() operation that sorts the name vector in alphabetical order and reorganises the age vector to match. Implement all "operations" as member functions.
This was basically chapter 8 exercise 7 but in a class form, so I just reused some of the functions from that and stuck it into a class.
#include "stdafx.h" #include "std_lib_facilities.h" class Name_pairs { private: vector<string> name; vector<double> age; public: void read_names(int iterator); //read in a series of names void read_ages(); //read in age for name void print(); //print out vectors void sortNP(); //sort the vectors alphabetically by name }; void Name_pairs::read_names(int iterator) { string names; for (int i = 0; i < iterator; ++i) { cout << "Name: "; cin >> names; name.push_back(names); cout << endl; } } void Name_pairs::read_ages() { double ages; for (int i = 0; i < name.size(); ++i) { cout << "Age for " << name[i] << ": "; cin >> ages; age.push_back(ages); cout << endl; } } void Name_pairs::print() { cout << endl; for (int i = 0; i < name.size(); ++i) cout << "Name: " << name[i] << " Age: " << age[i] << endl; } void Name_pairs::sortNP() { vector<string> name_copy = name; vector<double> age_copy = age; sort(name.begin(), name.end()); //sort actual names //go through each member of sorted name for (int i = 0; i < name.size(); ++i) { //go through each member of original copy name for (int j = 0; j < name.size(); ++j) { //if sorted name matches original if (name[i] == name_copy[j]) { //assign original age to new position to match sorted vector age[i] = age_copy[j]; } } } } int main() { cout << "How many names to read in? > "; int howMany; cin >> howMany; Name_pairs namePair; //read in names namePair.read_names(howMany); //read in ages namePair.read_ages(); //print namePair.print(); //sort namePair alphabetically namePair.sortNP(); //print namePair.print(); keep_window_open(); return 0; }
This was basically chapter 8 exercise 7 but in a class form, so I just reused some of the functions from that and stuck it into a class.
This comment has been removed by the author.
ReplyDeletei used this to sort and print->
ReplyDeletestruct sorted
{
string name;
double age;
};
void Name_pairs::sort_name()
{
cout<<"Sorted: "< ss;
sorted obj;
for(int i=0;i<name.size();++i)
{
obj.name=name[i]; obj.age=age[i];
ss.emplace_back(obj);
}
sort(name);
for(auto i:name)
{
for(auto x:ss)
{
if(i==x.name)
cout<<x.name<<" "<<x.age<<endl;
}
}
}
yours code is much simpler . thanks
on 8th line its vectorss
ReplyDeletethere seems to be some problem while writing comments, on 8th line ss is vector of type sorted.
ReplyDeleteYeah code doesn't format very well in Blogger comments. There is a problem with my original code above which I corrected in the github version; basically if you have duplicate names, the ages will be messed up. This is solved by doing what you've done by having a struct of a name and age, then sorting by names and applying those values back to the vectors.
Deletehere is the design i created (exercise 9) , its unfinished -> https://pastebin.com/PFya2SEs
ReplyDeleteproblem is in rent(). if i re-rent a book, it doesnot show book already rented out .
a.set_checkedout(b) is not changing the flag in original rack whereas i have passed the book and library objects as reference. any help will be appreciated.
Your function to return the rack in class Library returns a copy. Therefore, the l.ret_rack() in rent() returns a copy with a updating the local copied version. Change line 72 to:
Deletevector<Book>& ret_rack() { return rack; }
yeah i figured it out , thanks for the help
Delete