读书人

初学者的一个排序有关问题

发布时间: 2013-04-20 19:43:01 作者: rapoo

菜鸟的一个排序问题
对于一个结构体数组 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;
}

读书人网 >C++

热点推荐