Hi , I was going through this problem on SPOJ (http://www.spoj.com/problems/NSTEPS/) , where I was basically trying to practice OOP concepts in c++ . You can see in my code (http://pastebin.com/qubfkgEr) that I defined a point object and also defined a comparing operator for it but when i was running the code on sample tests , find operator in map is not working properly or basically I should say that since I am a newbie to these advanced features of C++ , I am , may be not using comparator function properly . Can anyone help me out to sort this problem .??
If possible , Please also tell me how to tackle this problem in java if some time I encounter it there..
Some people might also suggest another method for the problem but I would rather request everybody to just tell me about how to solve the above issue as more than just solving the problem , I want to learn one new method which will be more beneficial . :)
Your comparison operation is not symmetric.
Here is your code:
See, if
a.x > b.x
, you return true. Then, by symmetry, ifa.x < b.x
, the function should return false. But it compares the y part instead.You can insert the missing
a.x < b.x
case and check if it's any better, like this:On a side note, does
a.getfirst(), a.getsecond()
make much sense here? The whole "private individual coordinates with obscurely named getters and setters" looks like overengineering to me. Perhaps naming the fieldsx
andy
and accessing them directly would be more, well, to the point.And on another side note, your template's
#define ipow(a,b) (int)pow(a,b)
is dangerous. Half of possible compilers will give you 52 = 24 with it. You might want to add something (for example, 0.5), and only then convert to an integer.It is working and I have also understood what was the problem . Thanks for the help Gassa and yes , you are right that using x, y will be quite easy and to the point but as I said also , I am a beginner and when I started learning about OOP concepts , I read a lot about using access modifiers which is necessary for software engineering , so while practising on websites I usually try to stick to those rules so that becomes a habit . Obviously , I won`t get time in a live contest to write that much :P ..
And Thanks also for correcting that (ipow) thing also , I didn`t know that .