问题描述
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);