自定义对象的排序向量
Posted
技术标签:
【中文标题】自定义对象的排序向量【英文标题】:sorting vectors of custom objects 【发布时间】: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 个条目 -- 老实说,这并不是“非常大”。
【参考方案1】:
要对某物进行排序,排序算法需要知道如何比较项目std::sort。否则它将使用 int 的默认比较。您可以为项目实现比较运算符(、==)(或为您的项目实现比较类)。
【讨论】:
以上是关于自定义对象的排序向量的主要内容,如果未能解决你的问题,请参考以下文章