排序存储在Deque中的类对象

Sorting Class Objects Stored In Deque

本文关键字:对象 Deque 存储 排序      更新时间:2023-10-16

我试图将电子邮件地址存储在一个文件中,并按文件中的命中数进行排序。

我将电子邮件地址和点击次数存储在一个名为emailAddress的类中。

我在另一个叫做AddressManager的类的Deque中管理这个类的成员。

我试图使用的排序函数是从算法库排序。这样的。

[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:workspaceaddressmanager.cpp(36): error C3867: 'AddressManager::swapTest': function call missing argument list; use '&AddressManager::swapTest' to create a pointer to member
1>c:workspaceaddressmanager.cpp(36): error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided
1>          c:program files (x86)microsoft visual studio 10.0vcincludealgorithm(3639) : see declaration of 'std::sort'

我可以通过swapTest排序,或者它需要在AddressManager之外以某种方式定义吗?或者有人可以建议一种方法来实现我自己的排序在AddressManager和不使用库版本?

谢谢,t形十字章

就定义一个

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 );

使swapTeststatic函数,或使用lambda:

sort(addressQueue.begin(),addressQueue.end(),
     [](const emailAddress& address1, const emailAddress& address2)
       { return address1.released() > address2.released(); }
     );