I have a struct-based vector with 7 fields (strings). I need to sort by 5 of these fields. Easy in SQL, but not quite as simple in a vector, I think.
I found this code via google and was wondering if it's a good basis for my need.
Code:
#include <algorithm>
#include <vector>
#include <cstdlib>
class MyClass
{
public:
double value1;
double value2;
double value3;
// Friends not necessary with public data,
// required with private data.
friend bool less1(const MyClass& a, const MyClass& b);
friend bool less2(const MyClass& a, const MyClass& b);
friend bool less3(const MyClass& a, const MyClass& b);
friend bool less_sum(const MyClass& a, const MyClass& b);
};
inline bool less1(const MyClass& a, const MyClass& b)
{ return a.value1 < b.value1; }
inline bool less2(const MyClass& a, const MyClass& b)
{ return a.value2 < b.value2; }
inline bool less3(const MyClass& a, const MyClass& b)
{ return a.value3 < b.value3; }
inline bool lessSum(const MyClass& a, const MyClass& b)
{ return (a.value1 + a.value2 + a.value3) < (b.value1 +
b.value2 + b.value3); }
main() {
std::vector<MyClass> mcVec(10);
// Sort by value1
std::sort(mcVec.begin(), mcVec.end(), less1);
// Sort by value2
std::sort(mcVec.begin(), mcVec.end(), less2);
// Sort by value3
std::sort(mcVec.begin(), mcVec.end(), less3);
// Sort by sum of all three values
std::sort(mcVec.begin(), mcVec.end(), lessSum);
return EXIT_SUCCESS;
} // end main()