+ 2
Issue on Set with custom class
Hi I tried to create a set storing objects of custom class. Below is the code for same: https://code.sololearn.com/cpsm6QpT8WYL Can anyone please help me understand why size is not 2 once I called freqStack.getSize() in main function? I was expecting size as 3 as I am pushing three distinct values those are 5,7 and 4.
2 Answers
+ 2
std::set doesn't insert value which are equivalent to any other value in the set.
According to cppreference doc on standard set :
"two objects a and b are considered equivalent if neither compares less than the other: !comp(a, b) && !comp(b, a)"
( https://en.cppreference.com/w/cpp/container/set )
The comparison operator overload of your *myData* structure would always return "false" when 2 objects with unequal sized "indexes" are compared making them equivalant.
For example :
Consider the following case where you are trying to insert "a = myData (5, {1,3})" in *pq* and *pq* contains only one entry which is "b"( b.val = 7, and b.indexes = {2})
Due to the fact that a.indexes.size () != b.indexes.size (), neither would (a<b) hold nor (b<a), making *a* and *b* equivalent. And hence *a* would never be inserted in *pq*.
+ 1
Thanks Arsenic.
My < operator function's first condition is as below:
if (indexes.size() != obj.indexes.size())
return (indexes.size() == obj.indexes.size());
it should have been
if (indexes.size() != obj.indexes.size())
return (indexes.size() > obj.indexes.size());
modified code and hence kept both wrong and correct condition so that later on can recognise what was error