Sortieren Sie Die Objekte Der Klasse Gespeichert, In Deque
Ich versuche zu speichern, E-Mail-Adressen in eine Datei geschrieben und Sortieren Sie Sie, indem Sie zuvor in der Datei.
Ich bin die Speicherung der E-Mail-Adressen und die Anzahl der Treffer in einer Klasse namens emailAddress.
Ich bin die Verwaltung die Mitglieder dieser Klasse in eine Deque in einer anderen Klasse genannt AddressManager.
Die Sortieren-Funktion, die ich versuche zu verwenden ist die Art aus der algorithmen-Bibliothek. Wie diese.
[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);
}
Wenn ich compile bekomme ich diesen Fehler:
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'
Kann ich pass swapTest zu Sortieren, oder muss es definiert werden, die außerhalb der AddressManager irgendwie?
Oder könnte jemand empfehlen, einen Weg zur Umsetzung meiner eigenen Art in AddressManager und die Bibliothek nicht nutzen version überhaupt?
Dank,
ANkh
- Neuere C++ - Compiler benötigen Funktionszeiger übergeben werden, mit Ihrem vollen Namen, z.B. &AddressManager::swapTest, anstatt nur swapTest. Auch nicht Sortieren use-operator < auf die Art, sondern als eine Art Funktion? Sie können besser mit qsort wenn Sie möchten, C-Format Sortieren, anstatt über operator-überladung. EDIT: es ist ein 3-param-version der Art, mit einem Funktor. Siehe: codeproject.com/KB/stl/stdsort.aspx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach definieren, eine
und übergeben es an
std::sort
Oder machen swapTest eine statische Funktion und tun
std::sort( v.begin() , v.end() , &AddressManager::swapTest );
#include "emailAddress.h" class sortTest {public: bool sortTest::operator ()(const emailAddress &address1, const emailAddress &address2) { return address1.released()<address2.released(); } };
und verwendet es wie folgt:std::sort(addressQueue.begin(),addressQueue.end(), sortTest());
Entweder
swapTest
einestatic
- Funktion, oder verwenden Sie einen lambda-Ausdruck: