Writing the compare function correctly is critical, as a mistake can make your program crash.
There is a typical pattern you can follow, to write a compare function.
Assuming you have some composite struct X:
you can compose the compare function in the following manner
You can also look at different ways to do this here.
There is a typical pattern you can follow, to write a compare function.
Assuming you have some composite struct X:
struct X {
int first;
int second;
double third;
};
you can compose the compare function in the following manner
bool compare( const X& lhs, const X& rhs )
{
if (lhs.first < rhs.first) return true;
if (rhs.first < lhs.first) return false;
if (lhs.second < rhs.second) return true;
if (rhs.second < lhs.second) return false;
return lhs.third < rhs.third;
}
map<X, int, bool(*)(const X&,const X&) > x_values(compare);
Needless to say, that for possible increase in speed, a function object would be more appropriate to use, as it increases the possibility of getting inlined. Here's the equivalent functor:struct Compare {
bool operator() ( const X& lhs, const X& rhs )
{
if (lhs.first < rhs.first) return true;
if (rhs.first < lhs.first) return false;
if (lhs.second < rhs.second) return true;
if (rhs.second < lhs.second) return false;
return lhs.third < rhs.third;
}
};
map<X, int, Compare> x_values;
You can also look at different ways to do this here.
No comments:
Post a Comment