Advertisement
chevengur

Chapter 9: excercise 3

Sep 26th, 2023
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.57 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 sort();
  15.     std::vector<std::string>get_name();
  16.     std::vector<double>get_age();
  17.    
  18.  
  19. private:
  20.     std::vector<std::string>name_;
  21.     std::vector<double>age_;
  22. };
  23.  
  24. Name_pairs::Name_pairs(std::string name, double age) : name_{ name }, age_{ age } {
  25.     assert(name_.size() == age_.size());
  26.     assert(name_.size() != 0 && age>= 0);
  27. }
  28.  
  29. void Name_pairs::read_names(std::string name){
  30.     assert(!name.empty());
  31.     name_.push_back(name);
  32. }
  33.  
  34. void Name_pairs::read_age(double age){
  35.     assert(age >= 0);
  36.     age_.push_back(age);
  37. }
  38.  
  39. void Name_pairs::sort() {
  40.     assert(name_.size() == age_.size());
  41.  
  42.     if (name_.empty() || age_.empty()) {
  43.         std::cout << "No data to sort." << std::endl;
  44.         return;
  45.     }
  46.  
  47.     std::vector<std::pair<std::string, double>>temp_pair;
  48.     for (size_t i = 0; i != name_.size(); ++i) {
  49.         temp_pair.push_back(std::make_pair(name_[i], age_[i]));
  50.     }
  51.  
  52.     std::sort(temp_pair.begin(), temp_pair.end(), [](const auto& one, const auto& two) {
  53.         return one.first < two.first;
  54.         });
  55.  
  56.     for (size_t i = 0; i < temp_pair.size(); ++i) {
  57.         name_[i] = temp_pair[i].first;
  58.         age_[i] = temp_pair[i].second;
  59.     }
  60.  
  61. }
  62.  
  63. std::vector<std::string> Name_pairs::get_name(){
  64.     assert(name_.size() != 0);
  65.     return name_;
  66. }
  67.  
  68. std::vector<double> Name_pairs::get_age() {
  69.     assert(age_.size() != 0);
  70.     return age_;
  71. }
  72.  
  73. std::ostream& operator<<(std::ostream& os, Name_pairs& info) {
  74.     const std::vector<std::string>& names = info.get_name();
  75.     const std::vector<double>& ages = info.get_age();
  76.  
  77.     for (size_t i = 0; i < names.size(); ++i) {
  78.         os << "Name: " << names[i] << ", Age: " << ages[i] << std::endl;
  79.     }
  80.  
  81.     return os;
  82. }
  83.  
  84. bool operator==(Name_pairs& one, Name_pairs& two) {
  85.     return one.get_name() == two.get_name() && one.get_age() == two.get_age();
  86. }
  87.  
  88. bool operator!=(Name_pairs& one, Name_pairs& two) {
  89.     return !(one == two);
  90. }
  91.  
  92.  
  93. int main() {
  94.     Name_pairs person_;
  95.  
  96.     person_.read_age(25);
  97.     person_.read_names("Fil");
  98.  
  99.     Name_pairs person1_(person_);
  100.  
  101.     person_.read_age(25);
  102.     person_.read_names("Kalik");
  103.     person_.read_names("Dvalik");
  104.     person_.read_age(22);
  105.    
  106.     //before sort
  107.     std::cout << "Person_one: " << std::endl << person_ << std::endl;
  108.  
  109.     person_.sort();
  110.  
  111.     //after sort
  112.     std::cout << "Person_one: " << std::endl << person_ << std::endl;
  113.     std::cout << "Person_two: " << std::endl << person1_;
  114.  
  115.    
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement