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を読みましたが、役に立たなかったです。
uhm、逆のイテレータで単純にソートできますか? 'sort(row.rbegin()、row.rend())'? –
私は見つけることができる質問は... "100.000エントリですか?"どうやって知っているのですか? :P "doesnt work"は何でも意味することができるので、何かを結論に導きます。 – user463035818
sort(row.rbegin()、row.rend())はリストを逆転させました。 11114111211111から111112111411111に変更されたソートされたリストがありません – methodp