Map 排序

kingdom_0 2012-08-01 05:08:02
typedef struct  SongTable_t
{
std::string strCode;
std::string strNamePY;
}SongTable;

typedef std::map<int, std::vector<SongTable *> * > SongServerMap;
现在 SongServerMap 中 已经填充了很多数据
需求:
map集合中的数据,
根据 map 的value:std::vector<SongTable *> * 中的结构体 SongTable的字符串成员strNamePY 降序排序,
之后将集合放到
结构类似 std::map<int, std::vector<SongTable *> * >
这样的集合中
...全文
260 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mcrovc_mfc 2012-11-12
  • 打赏
  • 举报
回复
10楼神武。
这个娜戒海了 2012-08-06
  • 打赏
  • 举报
回复
看到楼主的头像,我很乐意来回个帖
kingdom_0 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:
上代码,看得清楚些:

C/C++ code

typedef struct SongTable_t
{
std::string strCode;
std::string strCodeBak;
std::string strName;
std::string strNamePY;
std::string strType;
i……

没有重……
[/Quote]
定义的SongTable结构体中已经重载 ‘<’,'=='运算符
kingxuke 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

用 sort 函数的重载版本 void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp ); 通过传入比较谓词(第三个参数)来实现。

传入一般函数:
C/C++ code

bool myLessThanFunc(const SongTable_t *lhs,const SongTab……
[/Quote]

下面的方法也可以:

bool operator < (const SongTable_t *lhs,const SongTable_t *rhs)
{
return (lhs->strNamePY < rhs->strNamePY);
}

sort(songList.begin(), songList.end());

楼主,Good Luck!
kingxuke 2012-08-04
  • 打赏
  • 举报
回复
用 sort 函数的重载版本 void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp ); 通过传入比较谓词(第三个参数)来实现。

传入一般函数:

bool myLessThanFunc(const SongTable_t *lhs,const SongTable_t *rhs)
{
return (lhs->strNamePY < rhs->strNamePY);
}

sort(songList.begin(), songList.end(), myLessThanFunc);


传入函数对象:

struct MyLessThanObj
{
bool operator() (const SongTable_t *lhs,const SongTable_t *rhs)
{
return (lhs->strNamePY < rhs->strNamePY);
}
} myLessThanObj;

sort(songList.begin(), songList.end(), myLessThanObj);


希望可以解决楼主的问题,Good Luck!
evencoming 2012-08-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
上代码,看得清楚些:

C/C++ code

typedef struct SongTable_t
{
std::string strCode;
std::string strCodeBak;
std::string strName;
std::string strNamePY;
std::string strType;
i……
[/Quote]
没有重载对应的operator< 或者传入 compare模板参数。
所以失败。
注意,vector存储的是 SongTable * 而不是SongTable
kingdom_0 2012-08-04
  • 打赏
  • 举报
回复
上代码,看得清楚些:
typedef struct  SongTable_t
{
std::string strCode;
std::string strCodeBak;
std::string strName;
std::string strNamePY;
std::string strType;
int nCate;
std::string strStyle;
std::string strLang;
std::string strSinger;
int nHits;
int nStar;
std::string strPath;

BOOL operator < (const SongTable_t &compare) const
{
return this->strNamePY < compare.strNamePY;
//return this->strCode < compare.strCode;
}
BOOL operator == (const SongTable_t &compare) const
{
return this->strCode == compare.strCode;
}

}SongTable;


	vector < SongTable *> songList;


CachedObjects::instance()->GetSongs(&songList, nRoomID);

sort(songList.begin(), songList.end());
songList.erase(unique(songList.begin(), songList.end()), songList.end());


songList 没有排序,求指点
kingdom_0 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

其实你是要对vector排序,那就遍历map,然对value中的value进行排序
vector可以直接上sort,写个比较函数,根据strNamePY 来比较。
[/Quote]
目前就是这么处理的.vector 里面放 struct 是没问题的,要是放 struct * 好像有点儿问题.也不知道问题出现在哪里.
seven807173440 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

来拿分的
[/Quote]
我是来顶求远君的
kingdom_0 2012-08-02
  • 打赏
  • 举报
回复
变换下思路
vector<structName> vect;
如果判断vect 中structName的某个属性==特定值的项
tongzhipeng5699 2012-08-01
  • 打赏
  • 举报
回复
其实你是要对vector排序,那就遍历map,然对value中的value进行排序
vector可以直接上sort,写个比较函数,根据strNamePY 来比较。
kingdom_0 2012-08-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
做个函数来判断SongTable *的大小,然后调用std::find给vector<SongTable *> *排序
[/Quote]
您没明白我的意思.
ouyh12345 2012-08-01
  • 打赏
  • 举报
回复
做个函数来判断SongTable *的大小,然后调用std::find给vector<SongTable *> *排序

64,685

社区成员

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

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