std::sort odwrócony iterator do wektora par

0

Jak stworzyć iterator taki, aby sort sortował od początku tablicy do wskazanego elementu? Mam taki kod:

#include <stdio.h>
#include <algorithm>
#include <vector>
#define ui unsigned int
std::vector<std::pair <ui, ui> >W(10000);
int main() {
	ui n;
	scanf("%u", &n);
	for(ui i=0; i<n; i++)
		scanf("%u", &W[i].first);
        for(ui i=0; i<n; i++)
		scanf("%u", &W[i].second);
        std::sort(W.rbegin(), W.rend());
} 

Chodzi o to, żeby nie sortował 10000 elementów, tylko te pierwsze n. Dziękuję za wszelką pomoc.

0
std::sort(W.begin(), W.begin() + n);
0

Tak to umiem, ale wtedy nie sortuje od największych do najmniejszych, tylko od najmniejszych do największych. Chodzi o to, żeby sortował tak samo ja z rbegin i rend, a nie begin, end.

0

To zastosuj funktor i będzie działać jak chcesz. Istnieje nie tylko programowanie imperatywne, funkcyjne też się czasem przydaje.

0

http://www.icis.pcz.pl/~iszczesniak/publications/funktory.pdf
Tutaj jest napisane, że źle zaprojektowany funktor może znacznie spowolnić działanie programu, a ja wątpię, żebym pierwszy raz zetknąwszy się z funktorami potrafił stworzyć odpowiedni dla tego przypadku. Zależy mi na skróceniu czasu wykonywania mojego programu, a nie jego wydłużeniu, więc gdybyście mogli podać inny sposób lub dokładniej wytłumaczyć ten, byłbym bardzo wdzięczny :)

1

A kto powiedział, że masz pisać nowy? http://www.cplusplus.com/reference/std/functional/

std::sort(W.begin(), W.begin() + n, std::greater<std::pair <ui, ui>&>());

Oprócz tego używaj typedef zamiast define.

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