•gabor_oliviu1991
|
 |
« : 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
|
 |
« 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. 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
|
 |
« 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
|
 |
« 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: #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
|
 |
« Răspunde #4 : Februarie 25, 2009, 00:14:56 » |
|
eu am folosit si in exteriorul structurii si a mers fara probleme  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
|
 |
« 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
|
 |
« 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 
|
|
|
Memorat
|
|
|
|
•Florian
|
 |
« Răspunde #7 : Martie 06, 2009, 11:09:52 » |
|
S-a mai discutat despre asta aici. 
|
|
|
Memorat
|
|
|
|
•alexandru92
|
 |
« Răspunde #8 : Martie 06, 2009, 11:48:46 » |
|
multumesc mult  . Am gasit si o alta metoda de a sorta, fara a pastra indicii  .....
|
|
« Ultima modificare: Martie 06, 2009, 18:44:22 de către alexandru »
|
Memorat
|
|
|
|
•rares192
Strain
Karma: 1
Deconectat
Mesaje: 12
|
 |
« 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
|
 |
« 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  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  Cam la fel cred ca s-ar proceda si pe qsort,dar prefer sort. http://www.dponline.ro/articol.php?idarticol=77
|
|
|
Memorat
|
|
|
|
|