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
Ideje lenne lezárni a beszúrásnál használt taget!
-----
"Ha javulni látod a dolgokat, akkor valami fölött elsiklottál."
Koszi a hasznos tanacsot! :)
on all of them solvable
Ne koszongess, hanem zard le, elcseszi az oldalt.
--
Akkor majd én...
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o
Igy gondolod?
--
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;
}
Igen, koszonom! Valoban kicsit jobban belegondolva, hogy igy nezem a kododat nem is ertem, hogy nem jottem ra.
Pedig ez a resz annyira egyertelmu:
map m;
m["valami"] = d;
Koszonom meg egyszer az utbaigazitast!
udv,
Tibi
on all of them solvable
Nem mellékesen: ugye a copy konstruktor* jól van implementálva? Ha objektumokat használsz a standard könyvtárral, akkor ez nagyon fontos!
*:
class Objektum
{
Objektum( const Objektum &arg ); // erre gondolok
};
--
http://www.naszta.hu
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:
A gond az, hogy d helyett a d.getKategoria() eredményét akarod a pair-ba rakni.
Ami gondolom string...
Így jó kell legyen.
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