2016-10-22 6 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()); 
    } 

私の問題は、PrintTopFreqの最後にすべてのそれらのsortの関数の最初の、です。機能は動作していないようですが、forループの後でソートを制御するためにこの部分を追加しますが、動作しませんでした。

実際に行う必要があるのは、結果ベクトルが降順になるようにこのソート関数をカスタマイズすることです。私はクラス定義の中でいくつかの関数をオーバーロードしようとしました。私は他の投稿から見ましたが、動作させることはできませんでした。
私はthis postを読みましたが、役に立たなかったです。

+0

uhm、逆のイテレータで単純にソートできますか? 'sort(row.rbegin()、row.rend())'? –

+2

私は見つけることができる質問は... "100.000エントリですか?"どうやって知っているのですか? :P "doesnt work"は何でも意味することができるので、何かを結論に導きます。 – user463035818

+0

sort(row.rbegin()、row.rend())はリストを逆転させました。 11114111211111から111112111411111に変更されたソートされたリストがありません – methodp

答えて

0

ソートアルゴリズムを並べ替えるには、アイテムを比較する方法を知る必要がありますstd::sort。それ以外の場合は、intのデフォルトの比較が使用されます。いずれかの比較演算子(<、>、==)を実装するか、またはあなたのアイテムの比較クラスを実装します。

関連する問題