微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过传递另一个函数作为参数来实现向前列表排序方法

如何解决通过传递另一个函数作为参数来实现向前列表排序方法

我有一个带有参数的令牌类-

private:
    string theText{};
    vector<size_t> theLineNumbers{};
    size_t theFrequency{ 1 };

现在我有一个 Tokenizer 类,它有一个令牌类的对象列表

private:
list <Token> thetokenList;

现在我想实现根据频率对对象列表进行排序的功能。 我已经编写了以下代码,但它不起作用。

void Tokenizer::sortOnFrequecy()const
{
    forward_list<Token> myflist(thetokenList.cbegin(),thetokenList.cend());
    /*forward_list <Token>::const_iterator it = myflist.cbegin();*/
    sort(myflist.cbegin(),myflist.cend(),compareFrequency());
}

bool Tokenizer::compareFrequency(const Token& t1,const Token& t2)
{
    return (t1.getFrequency() < t2.getFrequency());
}

我想打印令牌列表,按照频率降序排列。

请帮我解决这个问题。 如果需要任何其他代码,那么我很乐意提供相同的代码

解决方法

看看这个:

https://www.cplusplus.com/reference/list/list/sort/

您可以将 compareFrequency 设为静态或将其完全移出对象。此外,您在没有任何参数的情况下调用此比较,这是没有意义的。

使 compareFrequency 成为在对象外声明的普通函数,对列表进行排序将只是

myflist.sort(compareFrequency);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。