C++库函数对结构体排序,排序顺序紊乱的问题
1个回答
展开全部
这里以vector为例,主要有两种方式:
1.重载要排序的结构体或类的<号或者>号,演示代码如下:
#include<vector>
#include<algorIThm>
using
namespace
std;
typedef
struct
ValuePerWeight
//定义结构体
{
double
vw;
int
i;
bool
operator
<(const
ValuePerWeight
&other)const
//升序排序
{
return
vw>other.vw;
}
//或者
bool
operator
>(const
ValuePerWeight
&r)const
//降序排序
{
return
vw>other.vw;
}
}ValuePerWeight;
int
main(){
ValuePerWeight
a1..an;
vector<ValuePerWeight>
vpw
;
for(int
i=1;i<=n;i++){
....
vpw.push_back(ai);//对a1到an处理后加到vpw
}
sort(vpw.begin(),
vpw.end(),greater<ValuePerWeight>());//降序
sort(vpw.begin(),
vpw.end(),less<ValuePerWeight>());//升序
//默认情况为升序
sort(vpw.begin(),
vpw.end())
....
return
0;
}
2.不修改结构体或类的定义部分,用函数对象来实现,演示代码如下:
#include<vector>
#include<algorIThm>
#include
<functional>
using
namespace
std;
typedef
struct
ValuePerWeight//自定义结构体
{
double
vw;
int
i;
}ValuePerWeight;
//全局函数
bool
a_less_b(const
ValuePerWeight&
r,const
ValuePerWeight&
s)
{
return
r.vw
<
s.vw;
}
bool
a_greater_b(const
ValuePerWeight&
r,const
ValuePerWeight&
s)
{
return
r.vw
>
s.vw;
}
int
main(){
ValuePerWeight
a1..an;
vector<ValuePerWeight>
vpw
;
for(int
i=1;i<=n;i++){
....
vpw.push_back(ai);//对a1到an处理后加到vpw
}
sort(vpw.begin(),
vpw.end(),a_less_b);
//升序排序
sort(vpw.begin(),
vpw.end(),a_greater_b);
//降序排序
....
return
0;
}
1.重载要排序的结构体或类的<号或者>号,演示代码如下:
#include<vector>
#include<algorIThm>
using
namespace
std;
typedef
struct
ValuePerWeight
//定义结构体
{
double
vw;
int
i;
bool
operator
<(const
ValuePerWeight
&other)const
//升序排序
{
return
vw>other.vw;
}
//或者
bool
operator
>(const
ValuePerWeight
&r)const
//降序排序
{
return
vw>other.vw;
}
}ValuePerWeight;
int
main(){
ValuePerWeight
a1..an;
vector<ValuePerWeight>
vpw
;
for(int
i=1;i<=n;i++){
....
vpw.push_back(ai);//对a1到an处理后加到vpw
}
sort(vpw.begin(),
vpw.end(),greater<ValuePerWeight>());//降序
sort(vpw.begin(),
vpw.end(),less<ValuePerWeight>());//升序
//默认情况为升序
sort(vpw.begin(),
vpw.end())
....
return
0;
}
2.不修改结构体或类的定义部分,用函数对象来实现,演示代码如下:
#include<vector>
#include<algorIThm>
#include
<functional>
using
namespace
std;
typedef
struct
ValuePerWeight//自定义结构体
{
double
vw;
int
i;
}ValuePerWeight;
//全局函数
bool
a_less_b(const
ValuePerWeight&
r,const
ValuePerWeight&
s)
{
return
r.vw
<
s.vw;
}
bool
a_greater_b(const
ValuePerWeight&
r,const
ValuePerWeight&
s)
{
return
r.vw
>
s.vw;
}
int
main(){
ValuePerWeight
a1..an;
vector<ValuePerWeight>
vpw
;
for(int
i=1;i<=n;i++){
....
vpw.push_back(ai);//对a1到an处理后加到vpw
}
sort(vpw.begin(),
vpw.end(),a_less_b);
//升序排序
sort(vpw.begin(),
vpw.end(),a_greater_b);
//降序排序
....
return
0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询