2017-03-25 5 views
-5

Ich habe einige Probleme, diesen Code zu kompilieren. Ich kann die Fehler nicht finden. Der Fehler ist nicht wegen des Umfangs oder der konstanten Funktion. Ich habe auch versucht, die Sortiermethode in eine nicht konstante Funktion zu bringen, und derselbe Fehler ist aufgetreten.Std: Sortierung funktioniert nicht auf Vektoren

struct _Invoice { 
    unsigned int amm; 
    string id; 
}; 
. 
. 
.  
vector<_Invoice> Invoices; 
. 
. 
. 
bool invComp(const _Invoice &a, const _Invoice &b){ 
    return a.amm < b.amm; 
} 
unsigned int MedianInvoice (void) const{ 
    vector<_Invoice>tmpInvoices(Invoices); 
    sort(tmpInvoices.begin(), tmpInvoices.end(), invComp); 
    return (tmpInvoices.begin() + ceil((double)tmpInvoices.size()/2))->amm; 
} 

Vielen Dank im Voraus!

+2

Sie haben vergessen, uns Ihre 'invComp'-Funktion zu zeigen, was hier am wichtigsten ist. Du versäumst es auch zu sagen, welchen Fehler du gesehen hast, was dein Input ist, was dein erwarteter Output ist, was du tatsächlich hast, etc. Wir brauchen einen [MCVE], um sogar zu helfen. – ShadowRanger

+0

Off topic: [Welche Regeln gelten für die Verwendung eines Unterstrichs in einer C++ - ID?] (Http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in- AC-Kennung) Hinweis: Sie brechen sie. – user4581301

+0

Danke, ich war mir dieser Regeln nicht bewusst. Ich habe C++ nur für ein oder zwei Monate benutzt. Auch invCmp Funktion ist jetzt da. – totalolage

Antwort

2

  1. Sie müssen invComp für uns zur Verfügung stellen, um zu sehen, ob etwas falsch ist.

  2. Sie möchten nth_element anstelle von sort für diese Aufgabe verwenden.

auto const n = static_cast<std::size_t>(std::ceil(tmpInvoices.size()/2.0)); 
std::nth_element(tmpInvoices.begin(), tmpInvoices.begin() + n, tmpInvoices.end(), invComp); 
return (tmpInvoices.begin() + n)->amm; 
+0

Danke, Ich habe total vergessen, die Comp-Funktion zu integrieren. Es sollte jetzt da sein, danke nochmal für die Hilfe und sorry. – totalolage

+0

@FilipKalny: Sie müssen auch den spezifischen Fehler/das Problem angeben. Was ist falsch? Die Vergleichsfunktion sieht korrekt aus. – Pixelchemist

+0

Die Compiler-Ausgabe war lächerlich lang, deshalb habe ich es nicht mit einbezogen, es hatte mit der inneren Funktionsweise der Sortierfunktion zu tun. Ich habe den Fehler jetzt gefunden, ich hatte keine Ahnung, dass eine Methode und Funktion zwei völlig verschiedene Dinge sind, meine Vergleichsfunktion war in der Tat eine Methode. – totalolage