Red de conocimiento informático - Computadora portátil - Programación en C++, cuente todas las palabras que han aparecido en un archivo y generelas en orden de mayor a menor.

Programación en C++, cuente todas las palabras que han aparecido en un archivo y generelas en orden de mayor a menor.

La pregunta se puede dividir en 2 partes:

Cuenta todas las palabras que han aparecido

Salida del número mayor al menor #include

#include

#include

#include

#include

usando?namespace?std;

bool?mysort(pair??a,?pair??b){

si?(a.first?!=?b.first)

return?a.first?>?b.first;

else

return?a.segundo?

}

int?main(){

//Cuenta todas las palabras que tienen apareció:

ifstream?ifs("input.in",?ifstream::in);

unordered_map??um;

cadena?s;

mientras?(ifs?>>?s){

si?(um.find(s)?==?um.end() ) ?um[s]?=?1;

else?++um[s];

}

ifs.close();

//Ordenar (con el mayor número de apariciones en orden descendente como la mayor prioridad. Si el número de apariciones es el mismo, la clasificación será en orden ascendente de compilación del léxico:

vector??>?v;

for?(unordered_map::iterator?it?=?um.begin(); ?it?!= ?um.end();?++it)

v.push_back(make_pair(it->segundo,?it->primero));

sort(v.begin (),?v.end(),?mysort);

//Salida:

for?(int?i?=?0;?i ?

puts(v[i].segundo.c_str());

}

Algunos consejos:

Si solo genera cadenas, puts es la función interna más rápida (aproximadamente 10 veces más rápida que printf y printf es más rápida que cout), pero recuerde que puts solo puede generar cadenas c, así que recuerde para utilizar la función .c_str() al generar una cadena.

unordered_map es mucho más rápido que map porque usa una tabla hash (el tiempo de llamada es O(1), el tiempo de llamada del mapa es O(nlogn)), pero el precio es que no se almacena en orden .