Przeciążenie wbudowanej funkcji sort - do współrzędnych

0

Witam mam zrobić pewne zadanie, do którego potrzebuje mieć posortowaną listę (stos) po współrzędnej X, a jeśli są równe to po współrzędnej Y. Czy jest możliwość przeciążenia wbudowanej wbudowanej funkcji sort z biblioteki <algorithm>? Zrobiłbym też własne sortowanie ale powinna być w złożoności n log n lub w tej okolicy a wbudowana funkcja ma taką złożoność.

Przykładowo moja struktura, którą mam sortować
struct punkt
{
double x;
double y;
}

0

Funkcja std::sort używa operatora < do porównywania elementów. Przeciąż ten operator dla Twojej struktury zgodnie z zasadami jakie opisałeś.

Jeżeli z jakiegoś powodu nie używasz listy (std::list) z biblioteki standardowej, żeby użyć std::sort będziesz musiał dopisać iteratory...

Btw. Standard mówi, że nie można przeciążać ani dodawać funkcji do przestrzeni std. Można jedynie specjalizować szablony.

2

http://www.cplusplus.com/reference/algorithm/sort/ sort jako trzeci parametr przyjmuje komparator. Wystarczy, że napiszesz funkcję porównującą i przekażesz do sort:

#include <algorithm>

struct punkt {
    double x;
    double y;
};

bool compare(const punkt& lhs, const punkt& rhs) {
    if (lhs.x < rhs.x)
        return true;
    else if (lhs.x > rhs.x)
        return false;
    else
        return lhs.y < rhs.y;
}

int main() {
    punkt tab[5] = {{1,1}, {2,1}, {3,2}, {2,3}, {8,9}};
    std::sort(tab, tab+5, &compare);
}

Przeciążanie operatora < nie wydaje mi się dobrym podejściem, bo w rzeczywistości punkty nie tworzą porządku, więc taka definicja "ideologicznie" nie jest właściwa.

@Endrju: iteratory nie są niezbędne, vide mój kod. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1