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 :(得分:0)
要对排序算法进行排序,需要知道如何比较项std::sort。否则它将使用int的默认比较。您可以为item实现比较运算符(&lt;,&gt;,==)(或为您的项目实现比较类)。