#include #include #include #include #include #include using namespace std; typedef map Table; struct WordCounts { string word; unsigned count; WordCounts(): count(0) {} WordCounts (string w, unsigned c) : word(w), count(c) {} //sobrecarga del operador < bool operator< (const WordCounts& wc) { if (count > wc.count) return true; else if (count == wc.count) return (word < wc.word); else return false; } }; typedef list Concordance; void main () { const char UpperToLower = 'a' - 'A'; Table words; cout< y luego + "<= 'A') && (c <= 'Z')) c += UpperToLower; if ((c >= 'a') && (c <= 'z')) w += c; } while ((cin) && ((c >= 'a') && (c <= 'z'))); //se agraga la palabra al mapa, si ya existe, se //aumenta el contador. if (w.size() > 0) { words[w]++; } } Concordance concord; //iterador para el mapa. map::iterator indice = words.begin(); //palabras copiadas desde el mapa a la lista para ordenarlas. do { concord.push_back( WordCounts ( (*indice).first,(*indice).second ) ); indice++; }while(indice!=words.end()); // ordena concord en orden descendiente por count. concord.sort(); //crea un iterador para concord. Concordance::iterator Lindex = concord.begin(); //despliega el resultado en pantalla. cout<count<<" | "<word<