菜鸟的一个排序问题
对于一个结构体数组 vector<A> S[n]
struct A{
int i;
string a;
string b;
...
}
如果我想对S[n]数组以int i大小进行快速排序,我该怎么写。 排序
[解决办法]
用STL排序算法void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
不知道你是要根据结构的哪个值进行排序了
[解决办法]
为 A 重载一个 operator< 然后直接调用 std::sort 就行了.
struct A{
int i;
string a;
string b;
bool operator< (const A& rhs) { return i < rhs.i; }
};
std::sort(S[n].begin(), S[n].end());
[解决办法]
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Demo{
string name;
int score;
};
template<typename Type>
void print_elems(Type elem)
{
cout<<elem<<' ';
}
void (*pi)(int)=print_elems;
void (*ps)(string)=print_elems;
int main()
{
Demo dm[3];
dm[1].name="admin";
dm[1].score=99;
dm[2].name="kevin";
dm[2].score=100;
dm[0].name="guest";
dm[0].score=98;
vector<int> ivec;
vector<string> svec;
for(int i=0;i<3;i++)
{
svec.push_back(dm[i].name);
ivec.push_back(dm[i].score);
cout<<dm[i].name<<" : "<<dm[i].score<<endl;
}
sort(ivec.begin(),ivec.end());
cout<<ivec.size()<<endl;
for_each(ivec.begin(),ivec.end(),pi);cout<<endl;
sort(svec.begin(),svec.end());
cout<<svec.size()<<endl;
for_each(svec.begin(),svec.end(),ps);cout<<endl;
}