64,683
社区成员
发帖
与我相关
我的任务
分享
#include <algorithm>
#include <cstdlib>
#include <iostream>
struct final
{
double b;
static bool compare (final const* v1, final const* v2)
{
return v1->b > v2->b;
};
};
int main()
{
srand(time(0));
final* f [50];
for (size_t i = 0, I = 50; i != I; ++i)
{
f[i] = new final{double(rand()%100)};
}
std::cout << "before sorting" << std::endl;
for (size_t i = 0, I = 50; i != I; ++i)
{
std::cout << f[i]->b << " ";
}
std::cout << std::endl;
std::sort(f,f+50,final::compare);
std::cout << "after sorting" << std::endl;
for (size_t i = 0, I = 50; i != I; ++i)
{
std::cout << f[i]->b << " ";
}
std::cout << std::endl;
}
还不行的话,你就上全代码吧。[/quote]
行了!谢谢
#include <algorithm>
#include <cstdlib>
#include <iostream>
struct final
{
double b;
static bool compare (final const* v1, final const* v2)
{
return v1->b > v2->b;
};
};
int main()
{
srand(time(0));
final* f [50];
for (size_t i = 0, I = 50; i != I; ++i)
{
f[i] = new final{double(rand()%100)};
}
std::cout << "before sorting" << std::endl;
for (size_t i = 0, I = 50; i != I; ++i)
{
std::cout << f[i]->b << " ";
}
std::cout << std::endl;
std::sort(f,f+50,final::compare);
std::cout << "after sorting" << std::endl;
for (size_t i = 0, I = 50; i != I; ++i)
{
std::cout << f[i]->b << " ";
}
std::cout << std::endl;
}
还不行的话,你就上全代码吧。
class final
{
public:
CString a;
double b;
static bool compare (final *v1, final *v2)
{
return (v1->b > v2->b);
};
};
int main ()
{
final* f [50];
std::sort(f,f+50,final::compare);
}
class final
{
public:
CString a;
double b;
static bool compare (final *v1, final *v2)
{
return (v1->b > v2->b);
};
std::sort(f,f+count,final::compare);
};
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
class final{
public:
final(int i):i(i){}
string str;
int i;
};
bool com(final *ls, final *rs)
{
return (ls->i > rs->i);
}
int main(int argc, char **argv){
final f1(2);
final f2(1);
final f3(3);
vector<final*> vecFinal;
vecFinal.push_back(&f1);
vecFinal.push_back(&f2);
vecFinal.push_back(&f3);
cout << vecFinal[0]->i << "-" << vecFinal[1]->i << "-" << vecFinal[2]->i << endl;
sort(vecFinal.begin(), vecFinal.end(), com);
cout << vecFinal[0]->i << "-" << vecFinal[1]->i << "-" << vecFinal[2]->i << endl;
return 0;
}
class CSort
{
public:
static bool compare(final const & v1, final const & v2);
//std::sort要求函数对象,或是静态/全局函数指针
//非静态成员函数指针不能直接传递给std::sort
};
bool CSort::compare(final const & v1, final const & v2)
{
return (v1.b > v2.b);
}
这个是调用:
std::sort(&f[0],&f[count],CSort::compare);
//[ ]会消引用,所以要加上&操作符。
//count是数量就不要加1 ,是下标上界就加1
如果f是final **或是(final *)[],则:
class final_compare
{
public:
bool operator()(final const * v1, final const * v2)const;
//这回用函数对象演示
};
bool final_compare::operator()(final const * v1, final const * v2) const
{
return (v1->b > v2->b);
}
//调用还是要加&,构造一个函数对象代替函数指针
std::sort(&f[0],&f[count],final_compare());
由于是大于判断,所以是逆序。