首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-04-20 
菜鸟的一个排序问题对于一个结构体数组vectorA S[n]struct A{int istring astring b...}如果我想对S[

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

热点排行