vector数组排序

尛棜 2011-11-01 02:45:21
有一个数组定义为:
struct HD_Info
{
int nHDID;
CString strHDProgramNo;
CString strHDProgramName;
int nHDProgramType;
};
vector <HD_Info> m_vecPro;


起先这个数组存着一组数据:比如:

m_vecPro[0]={nHDID=308,strHDProgramNo = "0",strHDProgramName="中央一台",nHDProgramType = 25};
m_vecPro[1]={nHDID=301,strHDProgramNo = "1",strHDProgramName="中央二台",nHDProgramType = 25};
m_vecPro[2]={nHDID=302,strHDProgramNo = "2",strHDProgramName="中央三台",nHDProgramType = 25};
m_vecPro[3]={nHDID=303,strHDProgramNo = "3",strHDProgramName="深圳卫视",nHDProgramType = 25};
.............................................................................................


现在我需要把这个数组按照 nHDID的大小顺序排序:即排序后数组为:

m_vecPro[0]={nHDID=301,strHDProgramNo = "1",strHDProgramName="中央二台",nHDProgramType = 25};
m_vecPro[1]={nHDID=302,strHDProgramNo = "2",strHDProgramName="中央三台",nHDProgramType = 25};
m_vecPro[2]={nHDID=303,strHDProgramNo = "3",strHDProgramName="深圳卫视",nHDProgramType = 25};
m_vecPro[3]={nHDID=308,strHDProgramNo = "0",strHDProgramName="中央一台",nHDProgramType = 25};
.............................................................................................


因为对容器的操作不太熟悉
请大侠们帮下忙,谢谢!!!
...全文
294 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
尛棜 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 visualeleven 的回复:]
C/C++ code

#include "stdafx.h"

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

struct HD_Info
{
int nHDID;
string ……
[/Quote]


真是奇怪,我的和你的一样,就是把
bool lessmarkHD(const HD_Info& s1,const HD_Info& s2) 
{
return s1.nHDID < s2.nHDID;
}

声明放在头文件中就出错,真是莫名其妙!!

最终还是解决了!多谢!
黑泡泡选手 2011-11-01
  • 打赏
  • 举报
回复
你可以使用set/multiset容器
自由 2011-11-01
  • 打赏
  • 举报
回复
用仿函数。。。快下班了,闪人
Eleven 2011-11-01
  • 打赏
  • 举报
回复

#include "stdafx.h"

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

struct HD_Info
{
int nHDID;
string strHDProgramNo;
string strHDProgramName;
int nHDProgramType;
};

HD_Info info[]=
{
{308,"0","中央一台",25},
{301,"1","中央二台",25},
{302,"2","中央三台",25},
{303,"3","深圳卫视",25}
};

vector <HD_Info> m_vecPro;

bool lessmarkHD(const HD_Info& s1,const HD_Info& s2)
{
return s1.nHDID < s2.nHDID;
}
int _tmain(int argc, _TCHAR* argv[])
{
for(int i=0; i<sizeof(info)/sizeof(info[0]); i++)
{
m_vecPro.push_back(info[i]);
}
sort(m_vecPro.begin(),m_vecPro.end(),lessmarkHD);

for(vector<HD_Info>::const_iterator iter = m_vecPro.begin(); iter != m_vecPro.end(); iter++)
{
cout<<iter->nHDID<<", "<<iter->strHDProgramNo<<", "<<iter->strHDProgramName<<", "<<iter->nHDProgramType<<endl;
}
return 0;
}
尛棜 2011-11-01
  • 打赏
  • 举报
回复
#include <vector>
#include <algorithm>
#include <functional>

std::sort(HD_Pro.begin(),HD_Pro.end(),lessmarkHD);
bool lessmarkHD(const HD_Info& s1,const HD_Info& s2)
{
return s1.nHDID < s2.nHDID;
}


\TvPlayerDlg.cpp(2305) : error C3867: “CTvPlayerDlg::lessmarkHD”: 函数调用缺少参数列表;请使用“&CTvPlayerDlg::lessmarkHD”创建指向成员的指针
1>.\TvPlayerDlg.cpp(2305) : error C2780: “void std::sort(_RanIt,_RanIt)”: 应输入 2 个参数,却提供了 3 个
1> d:\vs2008\VS2008\VC\include\algorithm(3112) : 参见“std::sort”的声明


哪里不对???求救!!!
wuxinyanzi 2011-11-01
  • 打赏
  • 举报
回复
学习学习
尛棜 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 oyljerry 的回复:]
std::sort(...)
然后定义你的比较函数
[/Quote]
#include <vector>
#include <algorithm>
#include <functional>

std::sort(HD_Pro.begin(),SD_Pro.end(),lessmarkHD);
bool lessmarkHD(const HD_Info& s1,const HD_Info& s2)
{
return s1.nHDID < s2.nHDID;
}
为什么会不对?

>.\TvPlayerDlg.cpp(2305) : error C3867: “CTvPlayerDlg::lessmarkHD”: 函数调用缺少参数列表;请使用“&CTvPlayerDlg::lessmarkHD”创建指向成员的指针
1>.\TvPlayerDlg.cpp(2305) : error C2782: “void std::sort(_RanIt,_RanIt,_Pr)”: 模板 参数“_RanIt”不明确
1> d:\vs2008\VS2008\VC\include\algorithm(3275) : 参见“std::sort”的声明
1> 可能是“std::_Vector_iterator<_Ty,_Alloc>”
1> with
1> [
1> _Ty=SD_Info,
1> _Alloc=std::allocator<SD_Info>
1> ]
1> 或 “std::_Vector_iterator<_Ty,_Alloc>”
1> with
1> [
1> _Ty=HD_Info,
1> _Alloc=std::allocator<HD_Info>
1> ]
诶呦 2011-11-01
  • 打赏
  • 举报
回复
自己写个排序程序,参数为nHDID
kyotrue 2011-11-01
  • 打赏
  • 举报
回复
找本数据结构书自己写个冒泡就是了
oyljerry 2011-11-01
  • 打赏
  • 举报
回复
std::sort(...)
然后定义你的比较函数
尛棜 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hello273780239 的回复:]
vector 中有自带的排序函数,把nHDID的值作为参数传进Sort函数应该就可以
[/Quote]

没有找到sort函数啊
hello273780239 2011-11-01
  • 打赏
  • 举报
回复
vector 中有自带的排序函数,把nHDID的值作为参数传进Sort函数应该就可以

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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