2016-10-22 7 views
0
class hash 
{ 
private: 

    static const int tableSize = 1000; 
    struct item 
    { 
     string name; 
     unsigned int reps; 
     item* next; 
    }; 
    item* HashTable[tableSize]; 
} 

В моей программе я построил свою хэш-таблицу с этой структурой, и я использую цепочку. Эти элементы содержат очень похожие строки и целую переменную с ними, сохраняя, сколько раз они встречаются в текстовом файле. Я хочу написать функцию для печати наиболее часто используемых строк K в контексте.сортировочные векторы пользовательских объектов

void PrintTopFrequentList(int K); 

В результате получившийся хеш-стол на самом деле очень большой, может быть, 100.000 записей? То, что я получил до сих пор это ...

void hash::PrintTopFrequentList(int length) 
{ 
    vector<item*> row; 
    vector<item*> sorted; 
    int no; 
    for (int i = 0 ; i<tableSize ; i++) 
    { 
     item* Ptr= HashTable[i]; 

     while (Ptr->next!=NULL) 
     { 
      row.push_back(Ptr); 
      Ptr=Ptr->next; 
     } 
     sort(row.begin(),row.end()); 
     sorted.insert(sorted.end(), row.begin(),row.end()); 
     sort(sorted.begin(),sorted.end()); 
    } 

Мои проблемы, в первую очередь тех sort функций в конце PrintTopFreq. Функция не работает, после цикла for я добавляю эту часть для управления сортировкой, но она не работает.

Что мне действительно нужно сделать, так это настроить эту функцию сортировки так, чтобы мой вектор результатов находился в порядке убывания. Я попытался перегрузить некоторые функции внутри определения класса. Я смотрел с других сообщений, но не мог заставить его работать.
Я пробовал читать this post, но это не помогло.

+0

Умм, может быть, вы могли бы просто отсортировать на итераторах с обратной связью? 'sort (row.rbegin(), row.rend())'? –

+2

только вопрос, который я могу заметить, это «... 100.000 записей?» как мы должны знать? : P Просьба описать, что привело вас к выводу, что он не работает, потому что «doesnt work» может означать что угодно – user463035818

+0

sort (row.rbegin(), row.rend()) сделал вспять список Im, чтобы управлять, но все же я у меня нет отсортированного списка от 11114111211111 до 111112111411111 например – methodp

ответ

0

Чтобы отсортировать что-то, алгоритм сортировки должен знать, как сравнивать предметы std::sort. В противном случае он будет использовать сравнение по умолчанию для int. Либо вы реализуете операторы сравнения (<,>, ==) для элемента (или реализуете класс сравнения для своего элемента).

Смежные вопросы