Podstawowe pytanie brzmi: jak często będziesz wykonywać kwerendy przeciwko pojedynczemu zestawowi punktów.
Jeśli masz zamiar znaleźć jeden punkt w zestawie jeden raz, to znaczy, że @ Lucian ma rację: równie dobrze możesz pozostawić punkty nie posortowane i wykonać liniowe wyszukiwanie, aby znaleźć właściwy punkt.
Jeśli wykonasz stosunkowo dużą liczbę zapytań przeciwko temu samemu zestawowi punktów, warto uporządkować dane punktów, aby poprawić szybkość zapytań. @izomorphius wspomniał już o drzewie k-d, a to zdecydowanie dobra sugestia. Inną możliwością (wprawdzie bardzo podobną) jest drzewo oktowe. Pomiędzy tymi dwoma znajdujemy drzewo oktawowe, które jest nieco łatwiejsze do zrozumienia. Teoretycznie drzewo k-d powinno być nieco bardziej wydajne (średnio), ale nigdy nie widziałem dużej różnicy - choć być może przy różnych danych różnica byłaby znacząca.
Należy jednak zauważyć, że budowanie czegoś takiego jak drzewo k-d lub drzewo-oktawa nie jest wolne, więc nie trzeba wykonywać zbyt wielu zapytań dotyczących zestawu punktów, aby uzasadnić jego budowę. Jedno zapytanie wyraźnie tego nie usprawiedliwia, a dwa prawdopodobnie też nie będą - ale wbrew temu, co sugeruje Luchian, O (N log N) (tylko na przykład) nie jest bardzo powolny. Z grubsza rzecz biorąc, log (N) to liczba cyfr w liczbie N, więc O (N log N) nie jest tak naprawdę dużo wolniejsza niż O (N). To z kolei oznacza, że nie potrzebujesz szczególnie dużej liczby zapytań, aby usprawnić organizowanie danych, aby przyspieszyć każdą z nich.
+1 dla O (_n_). Myślę, że 'std :: min_element' jest prawdopodobnie najbardziej naturalnym rozwiązaniem. –