espermut.cpp
// $Id$
/*
COMIENZO DE DESCRIPCION
__USE_WIKI__
Una correspondencia es una _permutacion_ si el conjunto de
los elementos del dominio (las claves) es igual al del contradominio
(los valores). Consigna: escribir una funcion
predicado #bool es_permutacion(map<int,int> &M)# que retorna
#true# si #M# es una permutacion y #false# si no lo es.
[Tomado en Primer Parcial 27-SET-2007].
keywords: correspondencia
FIN DE DESCRIPCION */
// -----------------------------------------------------------------
#include <iostream>
#include <map>
using namespace std ;
bool es_permut(map<int,int> &M) {
map<int,int> M2;
map<int,int>::iterator q = M.begin(), q2;
while (q!=M.end()) {
M2[q->second] = q->first;
q++;
}
if (M.size() != M2.size()) return false;
q = M.begin();
while (q!=M.end()) {
q2 = M2.find(q->first);
if (q2==M2.end()) return false;
q++;
}
return true;
}
void print_map(map<int,int> &M) {
map<int,int>::iterator q = M.begin();
while (q!=M.end()) {
printf("(%d -> %d) ",q->first,q->second);
q++;
}
printf("\n");
}
//--------------------------------------------------------------------
int main() {
map<int,int> M;
int N=10;
// Deberia retornar `true'
for (int j=0; j<N; j++) M[j] = (j+3)%10;
print_map(M);
printf("is permutation ? %d\n",es_permut(M));
// Deberia retornar `false'
M.clear();
for (int j=0; j<N; j++) M[j] = (j+3);
print_map(M);
printf("is permutation ? %d\n",es_permut(M));
}
// -----------------------------------------------------------------
Generated by GNU Enscript 1.6.6.