Połączenie dwóch klas(list jednokierunkowych) za pomocą intersekcji

0

Witam, mam do napisania program, który połączy dwie listy za pomocą intersekcji [listy mają być w klasach]. Napisałem już dwie listy. Jedna przechowuje nazwisko studenta, druga zawiera numery grup. Teraz zaczyna się problem. W jaki sposób stworzyć klasę intersekcja(oczywiście też ma być listą), która przechowywała by nazwisko studenta i grupę do której jest przypisany(jeden student może być przypisany do wielu grup)?

0

Coś tu pomieszałeś. Intersekcja to inaczej część wspólna, iloczyn zbiorów.

0
#include <iostream>
#include <list>

using namespace std;

class lista: public list<int>
{
public:
  /* zalozenie jest takie ze obie listy sa posortowane */
  lista intersekcja(const lista& b)
  {
    const lista& a = *this; // na poczatku nie robilem dziedziczenia, tylko przekazywalem liste jako parametr i to jest pozostalosc
    lista ret;
    lista::const_iterator itA = a.begin(), itB = b.begin();
    while (itA!=a.end() && itB!=b.end())
      {
        while (itA!=a.end() && itB!=b.end() && *itA == *itB)
          {
            ret.push_back(*itA);
            ++itA;
            ++itB;
          }
        while (itA!=a.end() && itB!=b.end() && *itA > *itB)
          {
            ++itB;
          }
        while (itA!=a.end() && itB!=b.end() && *itA < *itB)
          {
            ++itA;
          }
      }
    return ret;
  }

  void wypisz()
  {
    const lista& a = *this;
    for (lista::const_iterator it = a.begin(); it!=a.end(); ++it)
      {
        cout << *it << "\n";
      }
  }
};
int main()
{
  lista a;
  lista b;
  a.push_back(1);
  a.push_back(2);
  a.push_back(3);
  a.push_back(4);
  b.push_back(2);
  b.push_back(3);
  b.push_back(4);
  b.push_back(5);
  lista wynik = a.intersekcja(b);
  cout << "Lista A:\n";
  a.wypisz();
  cout << "\nLista B:\n";
  b.wypisz();
  cout << "\nWynik:\n";
  wynik.wypisz();
  return 0;
}

przerób sobie int na strukture studentów. Dodanie operatorów w strukturze powinno pomóc. jeśli nie masz pososrtowanych elementów to jakaslista.sort(). Porównanie stringów możesz zrealizować za pomocą lexicographical_compare znajdującego się w bibliotece algorithm

0

To nie chodzi o część wspólną, źle to opisałem. Chodzi o agregację(połączenie dwóch list) w tym przypadku o przypisanie studenta do grupy

1 użytkowników online, w tym zalogowanych: 0, gości: 1