我正在尝试存储写在文件中的电子邮件地址,并按文件中的匹配对它们进行排序。
我将电子邮件地址和点击次数存储在名为emailAddress的类中。
我在另一个名为AddressManager的类中管理Deque中该类的成员。
我尝试使用的排序函数是算法库中的排序。 Like this.
[emailAddress.released() returns the number of hits. addressQueue is my emailAddress Deque]
bool AddressManager::swapTest(const emailAddress& address1, const emailAddress& address2)
{
cout<<"Comparing: "<<address1.released()<<" to "<<address2.released()<<endl;
return address1.released()>address2.released();
}
void AddressManager::sortAddresses()
{
sort(addressQueue.begin(),addressQueue.end(),
swapTest);
}
编译时我收到此错误:
1>c:\workspace\addressmanager.cpp(36): error C3867: 'AddressManager::swapTest': function call missing argument list; use '&AddressManager::swapTest' to create a pointer to member
1>c:\workspace\addressmanager.cpp(36): error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(3639) : see declaration of 'std::sort'
我可以通过swapTest进行排序,还是需要以某种方式在AddressManager之外定义? 或者有人可以建议一种在AddressManager中实现我自己的排序的方法,而不是根本不使用库版本吗?
谢谢, 安克
答案 0 :(得分:3)
只需定义一个
struct EmailSorter
{
bool EmailSorter::operator ()(const emailAddress &a, const emailAddress &b) {
return a.released()>b.released();
}
};
EmailSorter es;
std::sort( v.begin() , v.end() , es );
并将其传递给std::sort
或者将 swapTest 设为静态函数并执行
std::sort( v.begin() , v.end() , &AddressManager::swapTest );
答案 1 :(得分:3)
使swapTest
成为static
函数,或使用lambda:
sort(addressQueue.begin(),addressQueue.end(),
[](const emailAddress& address1, const emailAddress& address2)
{ return address1.released() > address2.released(); }
);