
02.03.2010, 16:13
|
|
Участник форума
Регистрация: 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 argc, char *argv[])
{
QCoreApplication a(argc, argv); // вызываем консоль
vector<string> vec; // объявляем контейнер строк. Двумерный массив.
// Тестовые данные в разном порядке
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<string> holder;
holder = vec;
// Находим уникальные, удаляем повторения
holder.erase(unique(holder.begin(), holder.end()), holder.end());
// Поглядим, что у нас в holder храниться
for (unsigned int i = 0;i < holder.size();++i)
cout << holder[i] << endl;
// Начинаем считать частоты. Определим массив типа (слово) -> (количество вхождений)
map<string, int> m;
for (unsigned int i = 0;i < 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;i < vec.size();++i)
cout << vec[i] << endl;
// пауза
system("pause");
return 0; // уходим
}
Последний раз редактировалось 4p3; 02.03.2010 в 16:15..
|
|
|