排序对象的矢量我这是基于关闭的一些这方面的工作代码: Sorting a vector of objects by a property of the objectC++模板的属性
我重新措辞,拿出了大量的非必要的东西,使其更容易让我明白。我仍然无法确切知道代码在做什么,有人可以评论这段代码或者逐步解释这段代码吗?我对模板的主要内容大多感到困惑。
#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
}