88 lines
2.2 KiB
C++
88 lines
2.2 KiB
C++
// vect3.cpp -- using STL functions
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <algorithm>
|
|
|
|
struct Review {
|
|
std::string title;
|
|
int rating;
|
|
};
|
|
|
|
bool operator<(const Review & r1, const Review & r2);
|
|
bool worseThan(const Review & r1, const Review & r2);
|
|
bool FillReview(Review & rr);
|
|
void ShowReview(const Review & rr);
|
|
int main()
|
|
{
|
|
using namespace std;
|
|
|
|
vector<Review> books;
|
|
Review temp;
|
|
while (FillReview(temp))
|
|
books.push_back(temp);
|
|
if (books.size() > 0)
|
|
{
|
|
cout << "Thank you. You entered the following "
|
|
<< books.size() << " ratings:\n"
|
|
<< "Rating\tBook\n";
|
|
for_each(books.begin(), books.end(), ShowReview);
|
|
|
|
sort(books.begin(), books.end());
|
|
cout << "Sorted by title:\nRating\tBook\n";
|
|
for_each(books.begin(), books.end(), ShowReview);
|
|
|
|
sort(books.begin(), books.end(), worseThan);
|
|
cout << "Sorted by rating:\nRating\tBook\n";
|
|
for_each(books.begin(), books.end(), ShowReview);
|
|
|
|
random_shuffle(books.begin(), books.end());
|
|
cout << "After shuffling:\nRating\tBook\n";
|
|
for_each(books.begin(), books.end(), ShowReview);
|
|
}
|
|
else
|
|
cout << "No entries. ";
|
|
cout << "Bye.\n";
|
|
// cin.get();
|
|
return 0;
|
|
}
|
|
|
|
bool operator<(const Review & r1, const Review & r2)
|
|
{
|
|
if (r1.title < r2.title)
|
|
return true;
|
|
else if (r1.title == r2.title && r1.rating < r2.rating)
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
bool worseThan(const Review & r1, const Review & r2)
|
|
{
|
|
if (r1.rating < r2.rating)
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
bool FillReview(Review & rr)
|
|
{
|
|
std::cout << "Enter book title (quit to quit): ";
|
|
std::getline(std::cin,rr.title);
|
|
if (rr.title == "quit")
|
|
return false;
|
|
std::cout << "Enter book rating: ";
|
|
std::cin >> rr.rating;
|
|
if (!std::cin)
|
|
return false;
|
|
// get rid of rest of input line
|
|
while (std::cin.get() != '\n')
|
|
continue;
|
|
return true;
|
|
}
|
|
|
|
void ShowReview(const Review & rr)
|
|
{
|
|
std::cout << rr.rating << "\t" << rr.title << std::endl;
|
|
}
|