我有一些基于此的工作代码: Sorting a vector of objects by a property of the object
我重新措辞并去掉了很多不必要的东西,让我更容易理解。我仍然无法确切地知道代码在做什么,有人可以评论这段代码或逐步引导我解释这里发生了什么吗?我对模板的主要内容感到困惑。
#import <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
using namespace std;
//Can someone please explain this template stuff???
template < typename TYPE, typename MTYPE>
struct member_comparer {
MTYPE TYPE::*val;
explicit member_comparer( MTYPE TYPE::*p ) {
val = p;
}
bool operator ()( TYPE lhs, TYPE rhs ) {
return lhs.*val < rhs.*val;
}
};
template<typename TYPE, typename MTYPE>
member_comparer<TYPE, MTYPE> make_member_comparer( MTYPE TYPE::*p ) {
return member_comparer<TYPE, MTYPE>( p );
}
//PLEASE EXPLAIN THE STUFF ABOVE HERE ^
struct Number
{
//declare our strings
int i;
string s;
//preset the values in the constructor!
Number( int i, string s ) {
this->i = i;
this->s = s;
}
};
int main()
{
//declare a new vector of Numbers
vector<Number> vec;
//fill in the vector
vec.push_back(Number(2, "two"));
vec.push_back(Number(8, "eight"));
// sort by i, ascending
sort( vec.begin(), vec.end(), make_member_comparer( &Number::i ) );
cout << vec.front().i << ", " << vec.back().i << "\n";
//outputs 2, 8
// sort by s, ascending
sort( vec.begin(), vec.end(), make_member_comparer( &Number::s ) );
cout << vec.front().s << ", " << vec.back().s << "\n";
//outputs eight, two
}