Fes la funció següent, que calcula la intersecció de dues llistes de persones en ordre ascendent de DNI:
/**
* @brief Calcula la intersecció de dues llistes ordenades.
*
* @param a Llista en ordre ascendent de DNI.
* @param b Llista en ordre ascendent de DNI.
*
* @return Llista en ordre ascendent de DNI amb les persones comunes d'a i b.
*/
list<Persona> interseccio_ordenada(const list<Persona>& a, const list<Persona>& b);
La intersecció conté les persones que apareixen a les dues llistes alhora. Dues persones es consideren iguals si tenen el mateix DNI.
Les llistes estan ordenades ascendentment per DNI (comparació
lexicogràfica de strings). La declaració de la classe
Persona és la següent:
class Persona {
public:
Persona(string dni, string nom); // Construeix una persona
string dni() const; // retorna el DNI
string nom() const; // retorna el nom
};
Has d’implementar la funció interseccio_ordenada en el
fitxer interseccio.cc, compilar (està preparat per poder
compilar i debuggar amb VSCode), i finalment enviar només el
fitxer interseccio.cc.
Cal que la funció sigui eficient i que no visiti elements de forma innecessària.
Els fitxers públics (icona del gatet) contenen:
main.cc |
el programa principal, amb la entrada/sortida feta |
persona.hh |
la classe Persona, amb els
mètodes esmentats |
Makefile |
per compilar amb make
còmodament |
.vscode |
carpeta per compilar i debuggar amb VSCode |
La funció rep dues llistes de persones no modificables, ordenades ascendentment per DNI. (De la lectura de les llistes, que estan separades per una línia buida, ja se n’encarrega el programa principal.)
La funció retorna la llista amb les persones comunes de les dues llistes, preservant l’ordre ascendent original. (De l’escriptura de la llista resultant també se n’encarrega el programa principal.)
Input
12345678Z Anna 34567890K Clara 45678901X David 56789012T Elena 78901234B Gerard 23456789D Bernat 34567890K Clara 56789012T Elena 67890123L Ferran 89012345C Helena
Output
34567890K Clara 56789012T Elena