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