自定义对象的排序向量

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 的默认比较。您可以为项目实现比较运算符(、==)(或为您的项目实现比较类)。

【讨论】:

以上是关于自定义对象的排序向量的主要内容,如果未能解决你的问题,请参考以下文章

通用特征矩阵/向量对象传输到自定义矩阵/向量容器

将指向自定义对象的指针向量存储到文件中

在 C++ 中对自定义对象的向量进行操作 [关闭]

无法在 android native c++ 中使用自定义类对象的向量

类自定义排序的 C++ 向量

【JS】数组对象自定义排序