Показать сообщение отдельно

  #7  
Старый 02.03.2010, 16:13
4p3
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме:
750247

Репутация: 92
По умолчанию

Цитата:
Сообщение от Napas  
ога, буду очень благодарен =)
PHP код:
#include <QtCore/QCoreApplication> // консольное приложение под Qt
#include <iostream> // потоки I/O
#include <algorithm> // функции алгоритмов
#include <cstdlib> // system
#include <string> // строковый класс
#include <vector> // класс контейнера
#include <functional> // Нужны предикаты
#include <map>
using namespace std;

// этот класс отсортирует нам массив по частотам
class sorting_by_freq: public binary_function<string,string,bool>
{
    
map<string,int> &m;
public:
    
sorting_by_freq(map<string,int> &x) : m(x) {};
    
bool operator()(const string &x, const string&y) const
    {
        return 
m[x] > m[y];
    }
};

int main(int argcchar *argv[])
{
    
QCoreApplication a(argcargv); // вызываем консоль
    
vector<stringvec// объявляем контейнер строк. Двумерный массив.

    // Тестовые данные в разном порядке
    
vec.push_back("lol");
    
vec.push_back("over");
    
vec.push_back("lol");
    
vec.push_back("lol");
    
vec.push_back("over");
    
vec.push_back("hello");

    
// Для начала сортируем вектор
    
sort(vec.begin(), vec.end(), std::less<string>());

    
// Нужно выделить уникальные элементы, сделаем в другом векторе
    
vector<stringholder;
    
holder vec;
    
// Находим уникальные, удаляем повторения
    
holder.erase(unique(holder.begin(), holder.end()), holder.end());
    
// Поглядим, что у нас в holder храниться
    
for (unsigned int i 0;holder.size();++i)
        
cout << holder[i] << endl;

    
// Начинаем считать частоты. Определим массив  типа (слово) -> (количество вхождений)
    
map<stringintm;
    for (
unsigned int i 0;holder.size();++i)
        
m[holder[i]] = count(vec.begin(), vec.end(), holder[i]);

    
// сортируем слова по частотам, третий параметр - условие сортировки
    
sort(vec.begin(), vec.end(), sorting_by_freq(m));
    
// выводим
    
for (unsigned i 0;vec.size();++i)
        
cout << vec[i] << endl;
    
// пауза
    
system("pause");
    return 
0// уходим


Последний раз редактировалось 4p3; 02.03.2010 в 16:15..
 
Ответить с цитированием