Sortowanie tablicy dwuwymiarowej, wg drugiej kolumny.

0

Witam, mam następujące wektory:


vector <vector <string>> tabela;
vector <string> czas;
załóżmy, że wkładam do niej 2 dane
        czas.clear();
	czas.push_back("rysiu");
	czas.push_back("56s");
	tabela.push_back(czas);
        czas.clear();
	czas.push_back("Maciek");
	czas.push_back("53s");
	tabela.push_back(czas);

Push Back doda mi na koniec aktualnej tablicy kolejny wiersz "Maciek 53s"
Jednak chciałbym, by automatycznie sortował mi przy wstawnianiu wg drugiej kolumny(53 < 56).

Myślałem nad insertem, oraz porównaniu drugiego indeksu, lecz nie wiem co z iteratorem dla vectora vectorów...

Myślałem też nad sort, ale nadal nie wiem co w przypadku dwu wymiarowej tablicy.

Jakieś pomysły, podpowiedzi?

0

pierwsze pytanie. Po co Ci to? Na co Ci kolekcja w ktorej dane sa od razu posortowane?

Jezeli jej tak bardzo potrzebujesz, to mozesz uzyc map albo multiset/set (w zaleznosci czy chcesz by dane sie powtarzaly czy nie) z odpowiednim comparatorem

0

To będzie ranking, więdz dane muszą być posortowane.

0

skoro to bedzie ranking to rob to inaczej.

Zrob sobie mape

std::map <string, int>

(czyli nick i czas) z odpowiednim Compare tak by na pierwszym miejscu bylby najmniejszy czas
przyklady znajdziesz na necie ;)

dodanie znacznika <code class="cpp"> - @furious programming

1

Nigdzie nie zostało powiedziane, że potrzebujesz szybko wyszukiwać po nazwie, zresztą jeżeli trzymasz to w wektorze to raczej nie sądzę, żebyś tej funkcjonalności potrzebował. Co oznacza, że wystarczy najprostsze

map<int, string>

i wtedy sortowanie po rankingu masz automatycznie przy każdym wstawianiu.

@fasadin mapa z komparatorem, który patrzy na wartość i olewa klucz brzmi dokładnie jakbyś potrzebował czegoś odwrotnego :P

0

Próbowałem z mapem, ale musze mieć powtarzające się wartości. Przecież różni gracze, mogą mieć te same czasy.

Powiedzmy, że wiem w które miejsce wstawić zawodnika, jak to zrobić z instrukcją insert?

i - miejsce
tabela[i].insert()?

czy

tabela.insert(tabela.begin()+i, czas)

????

0
freekill napisał(a):

Próbowałem z mapem, ale musze mieć powtarzające się wartości. Przecież różni gracze, mogą mieć te same czasy.
std::multimap

Powiedzmy, że wiem w które miejsce wstawić zawodnika, jak to zrobić z instrukcją insert?

multimap<int, string> ranking;
ranking[miejsce] = nazwa_gracza;

Gdybyś bardzo chciał insert, choć nie wiem po co, to:

ranking.insert(make_pair(miejsce, nazwa_gracza));
// albo ładniej
ranking.emplace(miejsce, nazwa_gracza);

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