Ich habe einen Vektor, der positive ganze Zahlen und -1 enthält. Mein Problem ist, ich möchte den Vektor sortieren, aber nicht berühren -1 elements
durch nur std::sort
(ich kenne andere Ansätze, um es zu lösen).Wie std :: vector sortieren, aber bestimmte Elemente nicht mit std :: sort ändern?
Zum Beispiel:
Input: [-1, 150, 190, 170, -1, -1, 160, 180]
Output: [-1, 150, 160, 170 , -1, -1, 180, 190]
Das ist meine Idee, es zu lösen, aber es hat nicht funktioniert:
sort(myVector.begin(), myVector.end(), [&](const int& a,const int& b)->bool {
if (a == -1 || b == -1)
return &a < &b;
return a < b;
});
Meine Ausgabe ist: [-1, 150, 170, 190, -1, -1, 160, 180]
Der Ausgang sollte sein: [-1, 150, 160, 170, -1, -1 , 180, 190]
Gibt es eine Idee, es zu lösen, indem Sie std::sort
verwenden?
Ich glaube nicht, es direkt möglich ist. Die Funktion 'std :: sort' arbeitet mit einem Bereich und es gibt keine Möglichkeit, die Elemente vorübergehend zu entfernen und später an den gleichen Positionen hinzuzufügen (natürlich können Sie dies in mehreren Schritten tun, aber ich glaube, das ist nicht was du fragst). Ich verstehe auch nicht, was du mit "anpassen" 'std :: sort' meinst. Und auch, wie 'std :: sort' funktioniert, ist die Implementierung AFAIK definiert, so dass Sie keine Annahmen über die Reihenfolge treffen können. – Yashas
@Yashas Entschuldigung für mein Englisch, Sie haben Recht, ich redigierte meine Frage –
Extrahieren Sie die Standorte von '-1' zu einem Vektor, löschen Sie alle' -1', sortieren und leiten Sie sie zurück. – Ron