I don't know if the return is specified if you don't give it one. If it's a random value, it's far more likely to be true than false.....

Your conditionals should not be checking both variables at the same time. You need to do something like
Code:
if (_first < p._first)
    return true;
if (_first > p._first)
    return false;
if (_i2 < p._i2)
    return true;
etc
so that you only consider additional variables if the ones you've seen so far are all equal.