infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: speedzeal din Iulie 11, 2009, 13:09:20



Titlul: multiset
Scris de: speedzeal din Iulie 11, 2009, 13:09:20
cum as putea sa folosesc un container multiset de tip struct?
exemplu:

struct  orice {int a,b;};
multiset <orice> heap;

Cum pot sa ii dau eu parametru dupa care sa sorteze?


Titlul: Răspuns: multiset
Scris de: Tataranu Vlad din Iulie 11, 2009, 13:19:46
Poti sa overloadezi operatorul < sau sa-ti definesti tu altul si sa-l pui la argumentele template-ului
Cod:
bool operator< ( structura a, structura b ) { returneaza true daca a este mai mic decat b }
Cod:
class structura_cmp {
public: bool operator() ( structura a, structura b ) { returneaza true daca a este mai mic decat b }
};

Edit: uitasem sa pun operatorul sa returneze bool :-'


Titlul: Răspuns: multiset
Scris de: Pripoae Teodor Anton din Iulie 11, 2009, 14:00:33
Merge si cu struct. Vezi ca trebuie sa te folosesti de constructorul clasei set cu functie de comparare :

Cod:

struct mystruct_cmp {
    operator() ( mystruct a, mystruct b ) { returneaza true daca a este mai mic decat b }
};

set <mystruct, mystruct_cmp> S;


Parca asa era, nu mai imi amintesc exact.


Titlul: Răspuns: multiset
Scris de: Sima Cotizo din Iulie 11, 2009, 15:39:54
La voi operatorul ala nu trebuie sa returneze ceva (sa aiba un tip)?  :-' Asta e cam cum ar arata complet:
Cod:
struct  mystruct {int a,b;};
struct mystruct_cmp {
    bool operator() ( mystruct A, mystruct B ) { // returneaza true daca A este mai mic decat B
          return A.a < B.a;  // sau ".b", sau ce vrei tu
    }
};

multiset <mystruct, mystruct_cmp> S;
@Toni, ce ai scris e echivalent cu ce a scris Vlad (struct = clasa cu toti membrii publici by default); ce ai facut acolo se cheama ca ai folosit un template  :thumbup:


PS: Eu am facut doar o observatie. Nu vreau sa porneasca discutii de la acest post legate de definitia pt "struct", "clasa", "template", "constructor" s.a. ;)


Titlul: Răspuns: multiset
Scris de: speedzeal din Iulie 11, 2009, 16:50:45
Mersi.