如何对vector排序

Charlie_Shu 2009-12-30 06:54:19
c++中
定义一个vector<int> record
现在我的record中有10W个成员,值有大有小,也可以重复
我想对record进行排序,请问用什么方法可以实现,效率又高。
因为是动态的,所以不能用数组。
请给出代码的结构,谢谢大家~
...全文
2340 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
pmars 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mstlq 的回复:]
调用?
那是在sort函数里面调用的VIC……

欲知真相,请自行翻查STL源码……
[/Quote]
介绍一本学习stl的书籍呗!
想拜摹一下!
mstlq 2009-12-30
  • 打赏
  • 举报
回复
或者类比下面代码理解……

typedef int (*FUN)(int lhs,int rhs);

int hehe(int a,int b,FUN fun)
{
return fun(a,b);
}

int add(int lhs,int rhs)
{
return lhs+rhs;
}

int main()
{

printf("%d\n",hehe(1,2,add)); //用这个add去类比理解VIC,用hehe去类比理解sort
return 0;
}
Charlie_Shu 2009-12-30
  • 打赏
  • 举报
回复
好的,非常感谢
mstlq 2009-12-30
  • 打赏
  • 举报
回复
调用?
那是在sort函数里面调用的VIC……

欲知真相,请自行翻查STL源码……
Charlie_Shu 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mstlq 的回复:]
引用 3 楼 mstlq 的回复:
用不着自己排,直接用std::sort就是
C/C++ code
#include <iostream>
#include <algorithm>
#include <vector>usingnamespace std;int main()
{int data2[5]={5,7,12,-3,9};
    vector <int> A(data2,data2+5);
    std::sort(A.begin(),A.end());for( vector <int>::iterator iter=A.begin();iter!=A.end();++iter) cout < <*iter < <endl;

    system("pause");return0;
}


如果你还不熟悉函数对象,可以用下面的代码,凑合,还算好理解……
C/C++ code
#include<iostream>
#include<algorithm>
#include<vector>usingnamespace std;

typedef vector<int> VI;int index=0;bool VIC(const VI& lhs,const VI& rhs) {return lhs[index]<rhs[index];}usingnamespace std;int main()
{
vector<VI> records;

index=0;
std::sort(records.begin(),records.end(),VIC);//以0下标排序
index=3;
std::sort(records.begin(),records.end(),VIC);//以3下标排序
system("pause");return0;
}

[/Quote]

rhs,lhs代表什么啊 为什么调用的时候没传参数呢
Charlie_Shu 2009-12-30
  • 打赏
  • 举报
回复
谢谢了,理解了

为什么#include <algorithm>
我引用这个头文件会提示我很多错误,说无法从以前的错误中恢复
mstlq 2009-12-30
  • 打赏
  • 举报
回复
看7楼^……
Charlie_Shu 2009-12-30
  • 打赏
  • 举报
回复
就是说我想排序的vector的成员也是个vector或者struct之类的,不是单一值的,我如何制定对具体哪一个进行排列
mstlq 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mstlq 的回复:]
用不着自己排,直接用std::sort就是
C/C++ code
#include<iostream>
#include<algorithm>
#include<vector>usingnamespace std;int main()
{int data2[5]={5,7,12,-3,9};
vector<int> A(data2,data2+5);
std::sort(A.begin(),A.end());for( vector<int>::iterator iter=A.begin();iter!=A.end();++iter) cout<<*iter<<endl;

system("pause");return0;
}
[/Quote]

如果你还不熟悉函数对象,可以用下面的代码,凑合,还算好理解……

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

typedef vector<int> VI;
int index=0;
bool VIC(const VI& lhs,const VI& rhs) {return lhs[index]<rhs[index];}

using namespace std;
int main()
{
vector<VI> records;

index=0;
std::sort(records.begin(),records.end(),VIC);//以0下标排序

index=3;
std::sort(records.begin(),records.end(),VIC);//以3下标排序

system("pause");
return 0;
}



kiwigiving 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chouchou2007 的回复:]
我想把records里边,按照record[i]的值进行排序
[/Quote]

什么意思?
mstlq 2009-12-30
  • 打赏
  • 举报
回复
可以……
自己定义比较规则就行……
Charlie_Shu 2009-12-30
  • 打赏
  • 举报
回复
我只是举个例子,sort能制定排序的具体列名吗
实际情况是vector<int> record;
vector<record> records;
我想把records里边,按照record[i]的值进行排序,i是record一个成员的下标,
需要怎么做,sort()貌似不行
mstlq 2009-12-30
  • 打赏
  • 举报
回复
用不着自己排,直接用std::sort就是

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{

int data2[5]={5,7,12,-3,9};
vector<int> A(data2,data2+5);
std::sort(A.begin(),A.end());


for( vector<int>::iterator iter=A.begin();iter!=A.end();++iter) cout<<*iter<<endl;

system("pause");
return 0;
}
lovesi3344 2009-12-30
  • 打赏
  • 举报
回复
vector <int> record;
sort(record.begin(),record.end());
adventurelw 2009-12-30
  • 打赏
  • 举报
回复
不是有STL吗?

64,650

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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