【问题标题】: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 个条目 -- 老实说,这并不是“非常大”。

标签: c++ sorting object vector


【解决方案1】:

要对某物进行排序,排序算法需要知道如何比较项目std::sort。否则它将使用 int 的默认比较。您可以为项目实现比较运算符(、==)(或为您的项目实现比较类)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    相关资源
    最近更新 更多