2011-12-19 12 views
2

ファイルに書き込まれた電子メールアドレスを格納し、ファイル内のヒットでソートしようとしています。デキューに格納されたクラスオブジェクトの並べ替え

電子メールアドレスとヒット数を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

答えて

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" クラスsortTest {パブリック: ブールsortTest ::演算子() (const emailAddress&address1、const emailAddress&address2) { return address1.released() Ankhwatcher

+0

あなたもそれを呼び出しています? –

+0

こんにちはParapura、私はそれをどのように呼んでいるかを付け加えました。それは今働いている。 – Ankhwatcher

3

どちらかswapTeststatic機能させるか、ラムダを使用します。

sort(addressQueue.begin(),addressQueue.end(), 
    [](const emailAddress& address1, const emailAddress& address2) 
     { return address1.released() > address2.released(); } 
    ); 
関連する問題