ListView 排序问题,求排序算法代码!谢谢

aniver 2003-09-14 10:11:23
ListView 排序问题,求排序算法代码!谢谢
...全文
90 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
meCAD 2003-09-19
  • 打赏
  • 举报
回复
哇.我以前还自个写.刚想把那丢人现眼的东西拿出来时

就看到季老大的回复.受益匪浅
venfly 2003-09-19
  • 打赏
  • 举报
回复
季老大果然厉害,认真且热心,是我们学习的榜样!
zihan 2003-09-17
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <Classes.hpp>
#pragma argsused
using namespace std;
//---------------------------------------------------------------------------
class MStr
{
public:
string FStr;
int Count;
MStr():FStr(""){}
MStr(string NewStr, int NewCount):FStr(NewStr),Count(NewCount){}
};
bool operator == (const MStr& x,const MStr& y)
{
return x.Count == y.Count;
}
bool operator < (const MStr& x,const MStr& y)
{
return x.Count < y.Count;
}
typedef vector<MStr> STRVECTOR;
//---------------------------------------------------------------------------
class MSlove
{
public:
STRVECTOR StrVector;
void GetWords();
};
void MSlove::GetWords()
{
for(int i = 0; i < N; i++)
StrVector.push_back(MStr(Str, Count));
sort(StrVector.begin(), &StrVector[StrVector.size()]);
}
上面这个的功能表示如果你传入N个Str,和他的个数Count,那么就安装他的Count排序,如果不满足,你可以重载操作符实现,或者你重新定义MStr类,然后传入你的caption,就可以按照你的Caption(把它转换为整形类排序,否则仍然是你原来的结果)来排序了.排序后的结果就是你想要的顺序,然后输出到你的listview就可以了
aniver 2003-09-17
  • 打赏
  • 举报
回复
哦,行了,谢谢大家!不过我暂时不结贴先,再向大家请教2个问题。

1,CompareText(((TListItem*)Item1)->Caption, ((TListItem*)Item2)->Caption)这个函数并不能实际上比较出整数的大小,它只是按字符来排序。

比如:99,100,101用这个函数按大到小排序是99,101,100,按小到大排序是100,101,99。我想问的是有没有其他函数取代这个函数,更好的实现排序呢?

2,还有一个问题,int __stdcall CustomSortProc(long Item1, long Item2, long ParamSort,int comlun)对这个函数,我想多设置一个参数来控制列,不过不知道怎么样传参数给comlun。请大家帮帮忙。
ccrun.com 2003-09-15
  • 打赏
  • 举报
回复
向季老大学习ing...
aniver 2003-09-15
  • 打赏
  • 举报
回复
谢谢啦,明白啦!我晚上回去试试看,
jishiping 2003-09-15
  • 打赏
  • 举报
回复
函数的前3个参数为寄存器变量(放在寄存器中,不入栈),省去了入栈、出栈过程,速度
当然要快了。同时寄存器变量本身就比一般的变量速度快。
jishiping 2003-09-15
  • 打赏
  • 举报
回复
我的代码没有错啊,要错的话,我估计是你在CustomSortProc前面加上TForm1::了,将函数
变为Form的成员函数了。注意,这不是成员函数,而是一个单独的函数。

__stdcall 与 __fastcall 的区别:Windows函数都是使用__stdcall,至于__fastcall,帮
助上是这么写的,使用__fastcall时,函数的前3个参数为寄存器变量。寄存器变量会加快
速度。
aniver 2003-09-15
  • 打赏
  • 举报
回复
to楼上:我这里是这样的,出现函数参数不匹配,ListView1->CustomSort(CustomSortProc, 0);
对CustomSortProc报错。是不是照贴代码就行啦!
ccrun.com 2003-09-15
  • 打赏
  • 举报
回复
to楼上,季老大的代码没有问题啊。
aniver 2003-09-15
  • 打赏
  • 举报
回复
谢谢jishiping 啦,不过我用不了,我留言给你啦。请你帮我详细解答一下好么?

to zihan :能不能把你的stl.方法也写出来大家分享一下,谢谢啦。
zihan 2003-09-14
  • 打赏
  • 举报
回复
To jishiping(JSP 季世平)

你有没有什么不会的阿??下次留点便宜让我们拣嘛!

老季的方法不错,出了以为,还可以用stl.也很方便的
freshman2003 2003-09-14
  • 打赏
  • 举报
回复
我说老季,你反应也太快了点吧!
jishiping 2003-09-14
  • 打赏
  • 举报
回复
ListView 排序问题,不需要你自己写排序算法,直接调用TListView的函数CustomSort就可
以了,这个函数需要一个比较2个Item大小的函数作为参数。下面的代码,按下Button1时,
对TListView的第一列倒排序(由大到小)。

int __stdcall CustomSortProc(long Item1, long Item2, long ParamSort)

{
return -CompareText(((TListItem*)Item1)->Caption,
((TListItem*)Item2)->Caption);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListView1->CustomSort(CustomSortProc, 0);
}

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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