Sortowanie wektorów dwuwymiarowych

0

Witam,
mam problem z sortowaniem wektorów dwuwymiarowych :

 vector <int> drugi(n);
	vector<vector<int> > wektor(m,drugi);

    for(int i=0; i<m; i++)									//Wypełnianie wektora losowymi liczbami z przedziału <0;200>
    {
		for(int j=0; j<n; j++) 
        { 
			int x= (rand ()%200 +0);
			wektor[i][j]= x;
        }
	}
	cout << endl;
    for(int i=0; i<m; i++)									//Wyświetlamy nasz dwuwymiarowy wektor
    { 
        for(int j=0; j<n; j++) 
		{
			cout<< (setw (3)) << wektor[i][j]<<" " ; 
		}
		cout << endl;
	}

Chciałbym teraz posortować ten dwuwymiarowy wektor wg rosnącej sumy elementów w jego wierszach. Nie mam pomysłu, myślałem nad napisaniem do tego funkcji, która wyglądałaby jakoś tak:

bool mojaFunkcja(const vector<int> &wektor1, const vector<int> &wektor2)
{
	int i=0;
     while(	i<	wektor1.size()){
         if(wektor1[i]<wektor2[i]){
             return true;
         }
         else if(wektor1[i]>wektor2[i]){
             return false;
         }
         i++;
     }
     return true; 

jednak akurat ta funkcja sortuje mi tylko pierwszą kolumnę rosnąco. Proszę o pomoc, z góry dziękuje

2

Najlepiej byłoby gdybyś mógł gdzieś przechować sumy każdego z wierszy (np. w elemencie nr 0).
Możesz też użyć UberVector: http://stackoverflow.com/questions/3221812/sum-of-elements-in-a-stdvector

Ale jeśli nie można, to ew. możesz tak:

bool mojaFunkcja(const vector<int> &wektor1, const vector<int> &wektor2)
{
    int sum1 = std::accumulate(wektor1.begin(), wektor1.end(), 0);
    int sum2 = std::accumulate(wektor2.begin(), wektor2.end(), 0);

    return (sum1 < sum2);
}

A potem:

std::sort (wektor.begin(), wektor.end(), mojaFunkcja); 
0

ładnie to wygląda i myślę, że działa tylko mój visual 2012 nie rozumie co to jest accumulate.

error C3861: 'accumulate': identifier not found

OK! mam, trzeba dodać bibliotekę
#include <numeric>

Ok, ale jak to teraz wyświetlić tak żeby miało ręce i nogi? Kiedy wyświetlam to tak jak wcześniej:

 for(int i=0; i<m; i++)									//Wyświetlamy nasz dwuwymiarowy wektor
    { 
        for(int j=0; j<n; j++) 
		{
			cout<< (setw (3)) << wektor[i][j]<<" " ; 
		}
		cout << endl;
	}

to nawet nie są one posortowane, to chyba nie działa

2

Dodaj przed wyświetleniem:

// Sortowanie elementów w wierszach
    for(int i=0; i<m; i++)                                    
    {
        std::sort(wektor[i].begin(), wektor[i].end()); 
    }
0

Dzięki ! Wyświetlają mi się ładnie posortowane, a teraz jak jest zsumować i wyświetlić tak: suma elementów wiersza 1 ≤ suma elementów wiersza 2 ≤ … itd

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