Hola, y no es molestia, claro.
Te muestro una posible solución, relativamente común, aunque quizá no demasiada apta para principiantes, pero hagamos un esfuerzo:
Va el código y después trato de explicarlo
Código C++:
Ver original#include <string>
#include <map>
#include <set>
#include <functional> // para std::greater
#include <iostream>
// muestra el contenido del alfabeto ordenado por frecuencias, de mayor a menor
void muestra_alfabeto(const std::map<char, int>& alfabeto)
{
std::set<std::pair<int, char>, std::greater<std::pair<int, char> > > frecuencias;
typedef std::map<char, int>::const_iterator it;
for(it i=alfabeto.begin(); i!=alfabeto.end(); ++i)
{
frecuencias.insert(std::make_pair(i->second, i->first) );
}
typedef std::set<std::pair<int, char>, std::greater<std::pair<int, char> > >::iterator sit;
for(sit i=frecuencias.begin(); i!=frecuencias.end(); ++i)
std::cout << i->first << " --> " << i->second << '\n';
}
int main()
{
std::string texto1;
texto1 = "some text asd 123456";
std::map<char, int> alfabeto;
for(std::size_t i = 0; i<texto1.length(); ++i)
alfabeto[texto1[i]]++;
muestra_alfabeto(alfabeto);
return 0;
}
La idea acá es armar un contenedor nuevo con el contenido del std::map; se necesita porque un map es un array asociativo organizado en pares (key, value) por definición, y ordenado de acuerdo a la "key" (aunque por defecto esas keys se ordenan de menor a mayor, puede indicarse que se ordenen con cualquier otro criterio que se defina, normalmente, en una función objeto -- ¿Qué qué es una función objeto? Bueno, no queda más remedio que estudiar)
Elegí para el ejemplo un std::set que es otro std::map, sólo que con la particularidad de que en él "key" y "value" son la misma cosa.
Invertí el contenido de los pares que se van insertando, ahora no es más <char, int> como en alfabeto, sino <int, char>, para que el primer criterio de ordenación sea la frecuencia y no el carácter. Y acá sí el orden lo establece la función objeto std::greater, para que los pares en el set se mantengan ordenados de mayor a menor.
Otra forma también podría ser ir agregando los apares a un std::vector, y después ordenar el vector con el mismo criterio.
Quizá quedaría mejor si además de mostrar el alfabeto ordenado por frecuencias, se mostraran también ordenado alfabéticamente; para eso, en lugar de usar el objeto
greater, habría que escribir una función objeto propia (que te queda como ejercicio).
Lareto :)