map hasznalata objektumokkal

Fórumok

Sziasztok!

Szeretnek segitseget kerni toletek a targyban emlitett dologgal kapcsolatban.
Sokat meg nem hasznaltam c++-t lehet, hogy ezert nem boldogulok. Tehat a problemam a kovetkezo:

Van egy map-em ami egy stringet es egy objektumot var kulcs-ertek parnak. Kerdesem az lenne, hogy egy beszettelt objektumot hogyan tudok atadni a mapnek?
Mert ez igy nem mukodik:


int main(){
datas d;
d.setKategoria("akarmi");

map m;

m.insert(pair("valami",d.getKategoria()));

for(map::iterator i=m.begin(); i!=m.end();++i){
cout<<(*i).second.getKategoria()<
}
reutn 0;
}

Ezzel probalkoztam. Strukturakkal mukodik a dolgog, csak objektumokkal nem.
A kerdesem az lenne, hogy milyen modon szurok be elemet a mapbe ha az egy objketum tipust var es hogyan tudom azt onnan kiolvasni?

Elore is koszonom a segiteseget!

udv,
Tibi

Hozzászólások

huha most latom, hogy egy csom mindent leszedett az uzenetembol az oldal, pedig megjeloltem, hogy kod.
Sebaj a lenyeg a kerdesem lenne ugy is.

on all of them solvable

Valami ilyesmire gondolsz?


#include <map>
#include <string>
#include <iostream>

using namespace std;

class datas {
public:
string getKategoria(void) {
return kat;
}

void setKategoria(string arg) {
kat = arg;
}

private:
string kat;
};

int main() {
datas d;
d.setKategoria("akarmi");

// Beszur
map<string,datas> m;
m["valami"] = d;

// kiolvas
map<string,datas>::iterator i;
for (i=m.begin(); i!=m.end(); i++)
cout << i->second.getKategoria() << endl;

return 0;
}

Innen mindenki tudhatja, hogy az insert függvényt jóval hatékonyabb használni.


template <class MapType, class KeyArgType, class ValueArgType>
 typename MapType::iterator effectiveAddOrUpdate( MapType &m, KeyArgType &k, ValueArgType &v )
{
 MapType::iterator lb = m.lower_bound(k);

 if ( ( lb != m.end() ) && !( m.key_comp()( k, lb->first ) ) )
 {
  lb->second = v;
  return lb;
 }

 return m.insert( lb, make_pair<KeyArgType,ValueArgType>(k,v) );
}

--
http://www.naszta.hu

A te kódodban itt a hiba:


m.insert(pair<string,datas>("valami",d.getKategoria()));

A gond az, hogy d helyett a d.getKategoria() eredményét akarod a pair-ba rakni.
Ami gondolom string...

Így jó kell legyen.


m.insert(pair<string,datas>("valami",d));

Aminek még nézz utána az a copy-construktor, mert az bizony meghívódik...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o