Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: SORT din STL  (Citit de 9399 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« : Februarie 22, 2009, 11:21:00 »

ce ar trebui sa fac ca sa folosesc sortul din STL pe o structura? din cate stiu s-a mai discutat problema aceasta da nu gasesc unde. din cate stiu trebuie implementata o functie de comparare... dar cam atat stiu. multumesc anticipat
Memorat
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« Răspunde #1 : Februarie 22, 2009, 11:28:52 »

Declari o functie care primeste ca parametru 2 variabile de tipul structurii si returneaza daca in sirul sortat prima structura apare inaintea celei de-a doua. Cand apelezi sort adaugi un al treilea parametru - numele functiei.

Cod:
int cmp(const nume_structura &a, const nume_structura &b)
{
    return a.ceva < b.ceva;
}

sort(v.begin(), v.end(), cmp);

Daca folosesti "&a" in loc de "a" ar trebui sa fie mai rapid pentru ca se transmite doar o referinta pentru structura, nu toata structura.
Memorat
stef2n
Nu mai tace
*****

Karma: 218
Deconectat Deconectat

Mesaje: 641



Vezi Profilul
« Răspunde #2 : Februarie 22, 2009, 12:09:43 »

Sau inzestrezi structura cu o relatie de ordine (definesti operatorul < ) si aplici sort-ul normal, tot cu 2 parametri.
Memorat

Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #3 : Februarie 25, 2009, 00:00:51 »

Stefan, mi s-a parut cam sec postul tau pentru cineva care nu stie C++. Mai jos am scris un exemplu:

Cod:
#include <algorithm>
#include <cstdio>
using namespace std;

const int MAX_N = 1024;

struct myStruct {
    int val1, val2;
    bool operator < (const myStruct& x) const {
         return val1 * val2 < x.val1 * x.val2;
    }
} v[MAX_N];
int n;

int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; ++i)
        scanf("%d %d", &v[i].val1, &v[i].val2);
    sort(v, v+n);
    for (int i = 0; i < n; ++i)
        printf("%d %d\n", v[i].val1, v[i].val2);
}
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #4 : Februarie 25, 2009, 00:14:56 »

eu am folosit si in exteriorul structurii si a mers fara probleme Smile
Cod:
bool operator<(const mystruct &a, const mystruct &b)
{       return (a.ceva<b.ceva);}

cum am folosit eu poate avea vreun efect global pentru semnul '<' si sa am erori in unele cazuri?

Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #5 : Februarie 25, 2009, 00:20:43 »

Ce ai facut tu este cealalta modalitate de a defini operatorul <. Nu te va incomoda cu nimic faptul ca nu l-ai bagat in structura.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #6 : Martie 06, 2009, 10:38:24 »

Sper sa nu se supere nimeni , dar n-am mai vrut sa deschid un alt topic despre aproape acelasi lucru. Cum sortez o structura cu qsort()?.....Nu stiu cum sa fac suprogramul compare, daca ma poate ajuta cineva Wink
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #7 : Martie 06, 2009, 11:09:52 »

S-a mai discutat despre asta aiciSmile
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #8 : Martie 06, 2009, 11:48:46 »

multumesc mult Very Happy. Am  gasit si o alta metoda de a sorta, fara a pastra indicii Smile.....
« Ultima modificare: Martie 06, 2009, 18:44:22 de către alexandru » Memorat
rares192
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« Răspunde #9 : Februarie 04, 2011, 15:51:38 »

Daca imi declar un vector<vector<int> > sol;

vectorul initial arata asa
cod:
4 6 2
2 1 3
3 6 5

dupa ce am facut sort(sol[ i ].begin(), sol[ i ].end(), cmp) am sortat elemente de pe fiecare linie
unde cmp este
cod:

bool cmp(const int x, const int y)
{
   return x < y;
}

2 4 6
1 2 3
3 6 5

si acum vreau sa sortez dupa dupa elementul de pe prima linie si va arata asa
cod:
1 2 3
2 4 6
3 6 5        cum as putea sa fac folosind sort din STL ? Multumesc anticipat !
« Ultima modificare: Februarie 04, 2011, 20:48:31 de către FMI - Paul-Dan Baltescu » Memorat
scipianus
Nu mai tace
*****

Karma: 129
Deconectat Deconectat

Mesaje: 345



Vezi Profilul
« Răspunde #10 : Februarie 04, 2011, 19:35:15 »

Pentru cei care doresc mai multe detalii despre sortarea cu functia sort pe mai multe criterii cititi aici un post despre acest subiect al profesorului meu  Smile Ce e important e sa stii forma standard sort(v,v+n,Ordonare()) sau sort(v+1,v+n+1,Ordonare()) daca tii vectorul de la 1 la n,iar in functia Ordonare() bagi toate criteriile de care ai nevoie in if-uri si else-uri  Very Happy  Cam la fel cred ca s-ar proceda si pe qsort,dar prefer sort.

http://www.dponline.ro/articol.php?idarticol=77
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines