Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.60 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<vector>
  4. #include<set>
  5. #include<unordered_map>
  6. #include<string>
  7. #include<algorithm>
  8. #include<numeric>
  9. #include"spaceship.h"
  10.  
  11. using namespace std;
  12.  
  13.     struct Sort
  14.     {
  15.         bool operator()(const Spaceship& s1, const Spaceship& s2)const{
  16.             if(s1.get_name()<s2.get_name()) return true;
  17.             else if(s1.get_name()==s2.get_name()){
  18.                 if(s1.get_faction()>s2.get_faction()) return true;
  19.                 else if(s1.get_faction()==s2.get_faction()){
  20.                     if(s1.get_gewicht()<s2.get_gewicht()) return true;
  21.                 }
  22.             }
  23.             return false;
  24.         }
  25.     };
  26.  
  27. template<class Key, class Compare = std::less<Key>>
  28. using sorted_set = std::set<Spaceship, Sort>;
  29.  
  30. int main()
  31. {
  32.     vector<Spaceship> v;
  33.  
  34.     ifstream input{"spaceship.txt"};
  35.     Spaceship m;
  36.     while (m.read(input))
  37.     {
  38.         v.push_back(m);
  39.     }
  40.  
  41.     //Aufgabe 1
  42.     //a
  43.     sorted_set make_set(const std::vector<Spaceship>& v)
  44.     {
  45.         sorted_set <Spaceship, Sort> sortiert(v.begin(), v.end());
  46.         /*sorted_set sortiert;
  47.         sortiert.insert(v.begin(), v.end());*/
  48.         return sortiert;
  49.     }
  50.     //b
  51.     std::tuple<Spaceship,Spaceship,Spaceship,Spaceship> find_extremes(const sorted_set& s)
  52.     {
  53.         sorted_set tmp;
  54.         copy_if(s.begin(), s.end(), back_inserter(tmp), [&](const Spaceship& t){
  55.             return t.get_name().find('H')!=string::npos;
  56.         });
  57.         if(tmp.empty())throw runtime_error("Set ist leer!");
  58.         auto it_begin = tmp.begin();
  59.         auto it_end = s.rbegin();               //s.end()
  60.         Spaceship mini = *min_element(it_begin, it_end, [&](const Spaceship& a, const Spaceship&, b){
  61.             return a.get_crew().size()<b.get_crew().size();
  62.         });                                     //s.end()
  63.         Spaceship maxi = *max_element(it_begin, it_end, [&](const Spaceship& a, const Spaceship&, b){
  64.             return a.get_crew().size()<b.get_crew().size();
  65.         });
  66.         return make_tuple(mini, maxi, *it_begin, *it_end);
  67.     }
  68.  
  69.     //Aufgabe 2
  70.     //a
  71.     double get_mean(const std::vector<Spaceship>& v, Faction faction)
  72.     {
  73.         double counter = accumulate(v.begin(), v.end(), 0.0,[&](double sum, const Spaceship& tmp){
  74.             return sum+(tmp.get_faction()==faction ? 1: 0);
  75.         });
  76.         double summe = accumulate(v.begin(), v.end(), 0.0,[&](double sum, const Spaceship& tmp){
  77.             return sum+(tmp.get_faction()==faction ? tmp.get_weight() : 0);
  78.         });
  79.         double d = summe/counter;
  80.         return d;
  81.     }
  82.     //b
  83.     std::vector<Spaceship> load(const std::vector<Spaceship>& v, int amount)
  84.     {
  85.         vector<Spaceship>res{};
  86.         transform(v.begin(), v.end(), back_inserter(res), [&](const Spaceship& tmp){
  87.             return tmp.get_weight()+amount;
  88.         });
  89.         return res;
  90.     }
  91.  
  92.     //Aufgabe 3
  93.     //a
  94.     std::unordered_map<Faction,std::set<string>> make_map(const std::vector<Spaceship>& v)
  95.     {
  96.         unordered_map<Faction,set<string>>res{};
  97.         for_each(v.begin(), v.end(), [&res](const Spaceship& tmp){
  98.             res[tmp.get_faction()].insert(tmp.get_name());
  99.         });
  100.         return res;
  101.     }
  102.     //b
  103.     Faction analyze(const std::unordered_map<Faction,std::set<string>>& m)
  104.     {
  105.         pair<Faction, set<string>> maxi =  *max_element(m.begin(), m.end(), [](const pair<Faction, set<string>>& a, pair<Faction, set<string>>& b){
  106.             return a.second.size() < b.second.size();
  107.         });
  108.         return maxi.first;
  109.     }
  110.     return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement