如何用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 展开
#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 展开
4个回答
展开全部
步骤:
#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;
}
#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;
}
展开全部
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类型的值的。
{
return (a.p)<(b.p);
}
貌似正确的写法应该是这个样子的
总之只要送两个值作为参数的时候你能返回一个表示比较结果的bool就是正确的,const goodinfo也好goodinfo也好goodinfo&也好const goodinfo&也好。不过const goodinfo&是我认为最正确的。
另外如果没有重载 ostream& operator << (ostream&, const goodinfo&) 的话是无法用 << 直接输出goodinfo类型的值的。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的问题不光在排序上,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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参数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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询