porównywanie zawartości dwóch wektorów

0

Mam problem z takim zadaniem: mam 2 pliki w których są wypisane różne imiona i nazwiska, wczytuje do dwóch vectorów struktury i muszę je porównać w celu znalezienia liczby osób, które się powtarzają w obu plikach, na razie mam tak:

struct Baza {
	string imie;
	string nazwisko;
};

int main() {
	Baza tmp1, tmp2;
	vector<Baza> vec1, vec2;
	fstream file1;
	file1.open("plik1.txt", ios::in);
	if (file1.good()) {
		while (!file1.eof()) {
			file1 >> tmp1.imie;
			getline(file1, tmp1.nazwisko, '\n');
			vec1.push_back(tmp1);
		}
		file1.close();
	}
	else {
		cout << "blad odczytu" << endl;
	}

	fstream file2;
	file2.open("plik2.txt", ios::in);
	if (file2.good()) {
		while (!file2.eof()) {
			file2 >> tmp2.imie;
			getline(file2, tmp2.nazwisko, '\n');
			vec2.push_back(tmp2);
		}
		file2.close();
	}
	else {
		cout << "blad odczytu" << endl;
	}
}

i problem pojawia sie w napisaniu tej funkcji, próbowałem na wiele sposobów ale nic z tego nie wychodzi. proszę o jakąś wskazówkę ;/

2

Nie baw się w wymyślanie koła na nowo. Posortuj dane, użyj std::set_intersection.

2

Po kodzie widzę, że jest po jednym imieniu i nazwisku w każdej linii. W takim razie nie potrzebujesz nawet struktury. Ja bym to zrobił tak:

#include <string>
#include <unordered_set>

int main()
{
    std::unordered_set<std::string> loadedData;
    std::unordered_set<std::string> repetitions;

    // wczytaj linia po linii i zapisz do loadedData

    // dla każdej linii w drugim pliku
    //    jeżeli wczytana linia znajduje się w loadedData
    //        dodaj tę linię to repetitions

    // po wszystkim, wypisz linie z repetitions
}

EDIT
albo jak @kq sugeruje (jeżeli jesteś mocno przywiązany do struktury i wektorów)

1

Musisz mieć operator porównania dla swojej klasy (albo dostarczyć komparator do sort i set_intersection).

    vector<Baza> v;
    sort(vec1.begin(), vec1.end());
    sort(vec2.begin(), vec2.end());

    set_intersection(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), std::back_inserter(v));
0

Ok, już mam. nie zauważyłem, że można bez struktury to zrobić i teraz śmiga :D
Co to set_intersection - średnio to do mnie na razie przemawia.
Dziękuję za pomoc

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