我試圖存儲寫入文件的電子郵件地址,並按文件中的匹配對它們進行排序。對存儲在Deque中的類對象進行排序
我將電子郵件地址和點擊次數存儲在名爲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中,而不是使用庫版本?
感謝, 安赫
最近的C++編譯器需要函數指針與他們的全名,如傳遞&AddressManager :: swapTest,而不僅僅是swapTest。此外,不排序使用運算符<類型,而不是排序功能?如果你想要C風格的排序,而不是通過運算符重載,你可能會更好地使用qsort。編輯:有一個3-param版本的排序,使用一個函子。請參閱:http://www.codeproject.com/KB/stl/stdsort.aspx – Hybrid 2011-12-19 12:16:06