【发布时间】:2016-10-22 15:55:14
【问题描述】:
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,但没有帮助。
【问题讨论】:
-
嗯,也许您可以简单地对反向迭代器进行排序?
sort(row.rbegin(), row.rend())? -
我能发现的唯一问题是“...100.000 个条目?”我们应该怎么知道? :P 请描述是什么让你得出它不起作用的结论,因为“不起作用”可能意味着任何事情
-
sort(row.rbegin(), row.rend()) 确实反转了列表我正在打印以控制,但我仍然没有排序列表,例如从 11114111211111 到 111112111411111 跨度>
-
@methodp 请在您的问题中添加更多信息,因为评论没有用。
-
我生成的哈希表实际上非常大,可能有 100.000 个条目 -- 老实说,这并不是“非常大”。