Mam wektor, który zawiera liczby całkowite dodatnie i -1. Mój problem polega na tym, że chcę posortować wektor, ale nie dotykać -1 elements
, używając tylko std::sort
(znam inne metody rozwiązania tego problemu).Jak sortować std :: vector, ale nie zmieniaj konkretnych elementów używając std :: sort?
Na przykład:
Wejście: [1, 150, 190, 170, 1, 1, 160, 180]
wyjściowe: [1, 150, 160, 170 , -1, -1, 180, 190]
to jest mój pomysł, aby go rozwiązać, ale nie zrobił praca:
sort(myVector.begin(), myVector.end(), [&](const int& a,const int& b)->bool {
if (a == -1 || b == -1)
return &a < &b;
return a < b;
});
Moje wyniki: [-1, 150, 170, 190, -1, -1, 160, 180]
Dane wyjściowe powinny wynosić: [-1, 150, 160, 170, -1, -1 , 180, 190]
Czy jest jakiś pomysł, aby rozwiązać go za pomocą std::sort
?
Nie sądzę, że jest to możliwe bezpośrednio. Funkcja 'std :: sort' działa na zakresie i nie ma sposobu, aby tymczasowo usunąć elementy i dodać je z powrotem na tych samych pozycjach później (oczywiście możesz to zrobić w wielu krokach, ale uważam, że to nie jest to, pytasz). Nie rozumiem też, co masz na myśli przez "dostosuj" 'std :: sort'. A także, jak działa 'std :: sort' jest zdefiniowana implementacja AFAIK, więc nie można wysnuć żadnych przypuszczeń na temat tego, w jaki sposób odbywa się porządkowanie. – Yashas
@ Yashas przepraszam za mój angielski, masz rację, zredagowałem moje pytanie –
Wyodrębnij lokalizacje '-1's do wektora, skasuj wszystkie' -1's, posortuj i potocz je z powrotem. – Ron