Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/06/2010, 12:09
fightmx
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 9 meses
Puntos: 22
Respuesta: Como se utiliza Función Objeto? :( Ayuda porfavor !!!!

Un poco de info en español, aunque en estos temas es más completa la información si la buscas en ingles.

Una pósible solución:
Código:
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <map>
#include <string>

using namespace std;

class MiFuncion{
	map<string, int>& d;
public:
	MiFuncion(map<string, int>& rd):d(rd){}
	void operator()(pair<string, string> t){
		map<string, int>::iterator i;
		i = d.find(t.first);
		if (i != d.end()) // Existe clave
			d[t.first] += 1;
		else
			d.insert(i, pair<string,int>(t.first,1));
	}
};

int main ()
{
	multimap<string, string> multi;
	map<string,int> d;

	cout << "Vaya insertando las claves en la forma K1, K2" << endl;
	cout << "Presione ctrl+z para finalizar" << endl;

	string k1, k2;

	while (cin >> k1)
	{
		cin >> k2;
		multi.insert(pair<string, string>(k1, k2));
	}

	cout << endl << "Elementos del multidiccionario: " << endl;
	for (multimap<string, string>::iterator it = multi.begin(); it != multi.end(); ++it)
	{
		cout << "  [" << (*it).first << ", " << (*it).second << "]" << endl;
	}

	for_each (multi.begin(), multi.end(), MiFuncion(d));

	cout << endl << "Elementos del diccionario: " << endl;
	for (map<string, int>::iterator it = d.begin(); it != d.end(); ++it)
	{
		cout << "  [" << (*it).first << ", " << (*it).second << "]" << endl;
	}

	return 0;
}
La parte del código en la que debes poner atención está resaltada en rojo.

Saludos.