2010-12-08 3 views
6

ich die Elemente in einer std::vector sortieren müssen, aber ich bin daran interessiert sind nur in den oberen N Elemente sortiert werden, nicht die gesamte Liste:Verwendung std :: sort oben N Elemente in einem std finden :: vector

Eg In einer Liste von 10 Elementen müssen nur die ersten 3 sortiert werden. Sie sich nicht um den Rest kümmern ...

1,2,3, 6,7,4,9,8,5

dies getan werden kann std::sort mit?

bearbeiten

ich einfach die besten N Elemente in einem Vektor finden benötigt. std::partial_sort_copy war genau was ich brauchte.

+1

Dies ist eine vage Frage - wollen Sie nur die ersten drei Elemente sortiert werden? Oder drei kleinste Elemente der ganzen Liste am Anfang sortiert zu haben? –

+0

Ja;) ... Es kann! – Incubbus

+0

Vielleicht möchten Sie einen Blick darauf werfen: http://stackoverflow.com/questions/217073/partial-sort-of-stdlist – Pacane

Antwort

7

Dies ist, was std::partial_sort ist für.

+0

Ihr Link sagt, der erste Teil wird sortiert: "der Unterbereich [erste, mittlere] enthält die kleinsten Elemente des gesamten Bereichs in aufsteigender Reihenfolge sortiert" –

+0

Danke Lou. Ich hatte 'partial_sort' und' partition' in meinem Kopf verwirrt. – aschepler

2

Wenn Sie bestellen möchten, dann partial_sort wird es tun, andernfalls, wenn Sie nur den Bereich nth_element Partition wird es schneller tun.

0

sagen Sie einfach die Sortierroutine, wo Sie das Sortieren beenden möchten:

std::vector<int> values; 
for (int i = 0; i < 10; ++i) 
    values.push_back(rand() % 10); 

std::cout << "UNSORTED" << endl; 
std::copy(values.begin(), values.end(), std::ostream_iterator<int>(std::cout, " ")); 
std::cout << std::endl; 

std::cout << "SORTED (Partially)" << std::endl; 
std::sort(values.begin(), values.begin() + 3); 
std::copy(values.begin(), values.end(), std::ostream_iterator<int>(std::cout, " ")); 
std::cout << std::endl; 
+2

Zugegeben, die ursprünglich gestellte Frage war sehr unklar, aber es ist jetzt klar, dass die obersten 3 Elemente des * gesamten * Vektors benötigt werden, so dass Ihr Ansatz nicht funktioniert. –

Verwandte Themen