123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // 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;
- }
|