apply-map.cpp
// $Id$
/* COMIENZO DE DESCRIPCION
__USE_WIKI__
Escribir una funci\'on
#void apply_map(list<int> &L, map<int,int> &M, list<int> &ML)# que,
dada una lista #L# y una correspondencia #M# retorna por
#ML# una lista con los resultados de aplicar #M# a los
elementos de #L#. Si alg\'un elemento de #L# no esta en el dominio
de #M#, entonces el elemento correspondiente de #ML# no es
incluido. Por ejemplo, si
#L = (1,2,3,4,5,6,7,1,2,3)# y
#M= {(1,2),(2,3),(3,4),(4,5),(7,8)}#,
entonces, despu\'es de hacer #apply_map(L,M,ML)#, debe quedar
#ML = {(2,3,4,5,8,2,3,4)}#.
[Tomado en el 1er parcial del 20/4/2006].
keywords: lista, correspondencia
FIN DE DESCRIPCION */
/*
Restricciones: No usar estructuras auxiliares. El tiempo de
ejecucion del algoritmo debe ser O(n), donde #n# es el numero de
elementos en la lista, asumiendo que las operaciones usadaas de
correspondencia son O(1).
*/
#include <iostream>
#include <map>
#include <list>
#include "./util.h"
using namespace std ;
//--------------------------------------------------------------------
void apply_map(list<int> &L,
map<int,int> &M,
list<int> &ML) {
ML.clear();
list<int>::iterator q = L.begin();
while (q!=L.end()) {
if (M.find(*q)!=M.end()) {
ML.insert(ML.end(),M[*q]);
}
q++;
}
}
//--------------------------------------------------------------------
int main() {
int vl[] = {1,2,3,4,5,6,7,1,2,3,-1};
list<int> L,ML;
insertl(L,vl,-1);
map<int,int> M;
M[1] = 2;
M[2] = 3;
M[3] = 4;
M[4] = 5;
M[7] = 8;
apply_map(L,M,ML);
cout << "ML: ";
list<int>::iterator q = ML.begin();
while (q!=ML.end()) cout << " " << *q++;
cout << endl;
}
// -----------------------------------------------------------------
//
Generated by GNU Enscript 1.6.6.