高手看过来,有关algorithm

alidiedie 2003-04-10 08:58:44
大家先看下面一段程序,通过下面的过程order数组记录了score数组中的数的大小顺序。

#include <functional>
#include <algorithm>
using namespace std;

float score[2] = {2.0,1.0};
int order[2];
bool cmp(const int &a,const int &b)
{
return score[a] < score[b];
}

int main()
{
int i;
for(i = 0; i < 2; i++)
{
order[i] = i;
}
sort(order,order + 2,ptr_fun(cmp));
return 0;
}

但是我在vc6的atl做的一个com组件中用类似的技术,order数组却没有按照预想的记录下score数组的大小顺序,难道stl不能在atl中用吗?
怎么回事呢?
...全文
34 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangrk 2003-04-11
  • 打赏
  • 举报
回复
sort(order,order + 2,cmp);
alidiedie 2003-04-11
  • 打赏
  • 举报
回复
高手
我其实就是要的这个程序
fangrk 2003-04-11
  • 打赏
  • 举报
回复
#include <algorithm>
#include <iostream>
#include <iterator>
using namespace std;

template<class T>
class Order
{
public:
Order(T* S):Start(S){}
bool operator()(int a,int b)
{return Start[a]<Start[b];}
private:
T* Start;
};

int main()
{
const int N=7;
int score[N]={56,45,85,65,74,96,85};
int result[N];
for(int i=0;i<N;++i) result[i]=i;
Order<int> ORDER(score);
sort(result,result+N,ORDER);
copy(result,result+7,ostream_iterator<int>(cout," "));
}
mr_oydy 2003-04-11
  • 打赏
  • 举报
回复
程序没问题, 这个程是order数组按score数组大小排序
因为score[a] < score[b];是false,所以相当于升序

sort的第三个参数不需要用ptr_fun, 因为本为sort第三个参数就是要一个
原型为bool(*)(int,int)的函数
alidiedie 2003-04-11
  • 打赏
  • 举报
回复
什么是个性化?

大家可能对ptr_fun不熟悉吧,所以我才叫高手进来的说。呵呵,其实就是把函数指针转化成函数对象
alula 2003-04-11
  • 打赏
  • 举报
回复
原因是你所 "预想的" 的东西,过于个性化了。
cxjddd 2003-04-10
  • 打赏
  • 举报
回复
order是1、0
ptr_fun,我不知道。
diabloqin 2003-04-10
  • 打赏
  • 举报
回复
up

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧