Advertisement
chevengur

Chapter 9: excercise 2

Sep 26th, 2023 (edited)
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <cassert>
  5. #include <algorithm>
  6. #include <map>
  7.  
  8. class Name_pairs {
  9. public:
  10.     Name_pairs(std::string name, double age);
  11.     Name_pairs() = default;
  12.     void read_names(std::string name);
  13.     void read_age(double age);
  14.     void print() const;
  15.     void sort();
  16.  
  17. private:
  18.     std::vector<std::string>name_;
  19.     std::vector<double>age_;
  20. };
  21.  
  22. Name_pairs::Name_pairs(std::string name, double age) : name_{ name }, age_{ age } {
  23.     assert(name_.size() == age_.size());
  24.     assert(name_.size() != 0 && age>= 0);
  25. }
  26.  
  27. void Name_pairs::read_names(std::string name){
  28.     assert(!name.empty());
  29.     name_.push_back(name);
  30. }
  31.  
  32. void Name_pairs::read_age(double age){
  33.     assert(age >= 0);
  34.     age_.push_back(age);
  35. }
  36.  
  37. void Name_pairs::print() const{
  38.     assert(name_.size() == age_.size());
  39.  
  40.     if (name_.empty() || age_.empty()) {
  41.         std::cout << "No data to print." << std::endl;
  42.         return;
  43.     }
  44.  
  45.     for (size_t i = 0; i != name_.size() && i != age_.size(); ++i) {
  46.         std::cout << name_[i] << " " << age_[i] << std::endl;
  47.     }
  48. }
  49.  
  50. void Name_pairs::sort() {
  51.     assert(name_.size() == age_.size());
  52.  
  53.     if (name_.empty() || age_.empty()) {
  54.         std::cout << "No data to sort." << std::endl;
  55.         return;
  56.     }
  57.  
  58.     std::vector<std::pair<std::string, double>>temp_pair;
  59.     for (size_t i = 0; i != name_.size(); ++i) {
  60.         temp_pair.push_back(std::make_pair(name_[i], age_[i]));
  61.     }
  62.  
  63.     std::sort(temp_pair.begin(), temp_pair.end(), [](const auto& one, const auto& two) {
  64.         return one.first < two.first;
  65.         });
  66.  
  67.     for (size_t i = 0; i < temp_pair.size(); ++i) {
  68.         name_[i] = temp_pair[i].first;
  69.         age_[i] = temp_pair[i].second;
  70.     }
  71.  
  72. }
  73.  
  74.  
  75. int main() {
  76.     Name_pairs person_{"Victory", 35 };
  77.     person_.read_age(25);
  78.     person_.read_names("K");
  79.  
  80.     person_.read_names("Adele");
  81.     person_.read_age(25);
  82.  
  83.     person_.read_names("Pavel");
  84.     person_.read_age(63);
  85.  
  86.     person_.print();
  87.     person_.sort();
  88.     person_.print();
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement