如何用sort对结构体中某一元素进行排序 c++

#include<iostream>#include<algorithm>usingnamespacestd;structgoodinfo{floatp;//物品效益fl... #include <iostream>
#include <algorithm>
using namespace std;
struct goodinfo
{
float p; //物品效益
float w; //物品重量
float X; //物品该放的数量
int flag; //物品编号
};//物品信息结构体
bool comparep(goodinfo* a,goodinfo* b)
{
return (a.p)<(b.p);
}
void main()
{
int n;
cin>>n;
goodinfo *goods=new goodinfo[n];
//对goods中元素进行赋值。
sort(goods,goods+n,comparep);
for(int i=0;i<n;i++)
{
cout<<goods[i]<<" ";
}
}

错误提示:
error C2228: left of '.p' must have class/struct/union type
展开
 我来答
tn瓶邪
推荐于2017-09-23 · TA获得超过1882个赞
知道小有建树答主
回答量:610
采纳率:98%
帮助的人:113万
展开全部
步骤:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct example
{
int elem1;
int elem2;
}example;

/*这个comparison函数很重要.如果希望升序排序,就是"<",降序排列就是">"号,这样便于直观记忆.如果希望用elem2作为比较标准
就把elem1改为elem2,这样结构体就以elem2为比较标准排序了.*/
bool comparison(example a,example b){
return a.elem1<b.elem1;
}
int main()
{
int N;
fin>>N;

vector<example> array(N);

for(int i=0;i<N;i++)
{
fin>>array[i].elem1>>array[i].elem2;
}

sort(array.begin(),array.end(),comparison);

for(int i=0;i<N;i++)
{
cout<<array[i].elem1<<" "<<array[i].elem2<<endl;
}
return 0;
}
空雪梦见
推荐于2017-10-03 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1205万
展开全部
bool comparep(const goodinfo& a, const goodinfo& b)
{
return (a.p)<(b.p);
}

貌似正确的写法应该是这个样子的

总之只要送两个值作为参数的时候你能返回一个表示比较结果的bool就是正确的,const goodinfo也好goodinfo也好goodinfo&也好const goodinfo&也好。不过const goodinfo&是我认为最正确的。

另外如果没有重载 ostream& operator << (ostream&, const goodinfo&) 的话是无法用 << 直接输出goodinfo类型的值的。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jackwind1987
2013-11-26 · TA获得超过2738个赞
知道大有可为答主
回答量:1268
采纳率:50%
帮助的人:493万
展开全部
你的问题不光在排序上,cout<<goods[i]<<" ";要修改成

cout<<goods[i].x << ... ... <<" ";这种格式的

另外排序的
bool comparep(goodinfo* a,goodinfo* b)
{
return (a.p)<(b.p);
}
改成
bool comparep(const goodinfo a, const goodinfo b)
{
return (a.p)<(b.p);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heb_feng2012
2013-11-26 · 超过61用户采纳过TA的回答
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:167万
展开全部
参数a,b是指针要这样用a->p,b->p
追问
bool comparep(goodinfo a,goodinfo b)
{
return (a->p)p);
}

改成这个了,但是还是不能用!
追答

应该这样的

bool comparep(goodinfo *a,goodinfo *b)
{
 return (a->p)<(b->p);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式