对于vector结构包含自定义的包括struct等的排序问题,常见的几种方法:
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct mystruct {
string name;
int score;
bool operator< (const struct mystruct& v) const {
return score < v.score;
}
bool operator== (const struct mystruct& v) const {
return score == v.score;
}
};
class Comparer {
public:
bool operator() (const mystruct&a, const mystruct& b) const {
return a.score < b.score;
}
};
bool compare(const struct mystruct& a, const struct mystruct& b) {
return a.score < b.score;
}
int main(int argc, char **argv)
{
vector<struct mystruct> myvect;
struct mystruct tag;
tag.name="bbb";
tag.score=80;
myvect.push_back(tag);
tag.name="aaa";
tag.score=11;
myvect.push_back(tag);
tag.name="ccc";
tag.score=22;
myvect.push_back(tag);
//sort(myvect.begin(), myvect.end(), compare);
//sort(myvect.begin(), myvect.end());
//sort(myvect.begin(), myvect.end(), greater<struct mystruct>() );
sort(myvect.begin(), myvect.end(), less<struct mystruct>() );
sort(myvect.begin(), myvect.end(), Comparer());
vector<struct mystruct>::iterator iter;
for (iter = myvect.begin(); iter != myvect.end(); ++iter) {
printf("it->first=%s,it->second=%d\n", iter->name.c_str(), iter->score);
}
return 0;
}