2011-12-19 44 views
2

我試圖存儲寫入文件的電子郵件地址,並按文件中的匹配對它們進行排序。對存儲在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中,而不是使用庫版本?

感謝, 安赫

+0

最近的C++編譯器需要函數指針與他們的全名,如傳遞&AddressManager :: swapTest,而不僅僅是swapTest。此外,不排序使用運算符<類型,而不是排序功能?如果你想要C風格的排序,而不是通過運算符重載,你可能會更好地使用qsort。編輯:有一個3-param版本的排序,使用一個函子。請參閱:http://www.codeproject.com/KB/stl/stdsort.aspx – Hybrid 2011-12-19 12:16:06

回答

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

+0

我定義它是這樣的: '#include「emailAddress.h」 class sortTest {public: bool sortTest :: operator() (const emailAddress&address1,const emailAddress&address2) { return address1.released() Ankhwatcher 2011-12-19 12:40:34

+0

您還調用它,因爲我? – 2011-12-19 12:41:35

+0

嗨Parapura,我已經添加了我如何打電話給它。現在正在工作。 – Ankhwatcher 2011-12-19 12:45:42

3

要麼讓swapTest一個static功能,或使用lambda:

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