需求:

客户端收到游戏中的所有联盟列表,现在需要按联盟的属性比如lv来进行排序。

数据存储:

每个联盟数据是一个对象,所有的联盟列表存在一个vector容器里面。

老的解决方法:

冒泡排序方法算法

新的方法:

参考http://blog.csdn.net/aastoneaa/article/details/8471722,总结使用C++自带的std::sort函数。

详细方法:

军团对象,定义了军团的各种简单属性

class AllianceData
{
public:
AllianceData(); ~AllianceData(); std::string uid;//唯一key std::string aname;//名称 nv_uint32 num;//成员总数 nv_uint32 alv;//等级
};

定义用来比较的函数对象,我们命名为CompHelper.h

#ifndef _CompHelper_H_
#define _CompHelper_H_ #include "AllianceData.h"
//升序排列
class CompLess
{
public:
bool operator ()(const AllianceData& pstItem1, const AllianceData pstItem2)
{
return pstItem1.alv < pstItem2.alv;
}
};
//降序排列
class CompGreater
{
public:
bool operator ()(const AllianceData& pstItem1, const AllianceData& pstItem2)
{
return pstItem1.alv > pstItem2.alv;
} }; #endif // _CompHelper_H_

我们调用时这样:

    std::vector<AllianceData> v_a;
AllianceData m;
m.uid = "1";
m.aname ="name1";
m.alv = 6;
v_a.push_back(m);
m.uid = "1";
m.aname ="name1";
m.alv = 6;
v_a.push_back(m);
m.uid = "1";
m.aname ="name1";
m.alv = 6;
v_a.push_back(m);
sort(v_a.begin(),v_a.end(),CompGreater());//降序排列

假如你又要对已有的装备排序,那么可直接在CompHelper.h 中重载()方法即可,比如:

#ifndef _CompHeloer_H_
#define _CompHeloer_H_ #include "AllianceData.h"
#include "ArmyData.h"
#include "EquipmentData.h" //升序排列
class CompLess
{
public:
bool operator ()(const AllianceData& pstItem1, const AllianceData pstItem2)
{
return pstItem1.alv < pstItem2.alv;
}
bool operator ()(const CommanderData& pstItem1, const CommanderData pstItem2)
{
return pstItem1.lv < pstItem2.lv;
}
bool operator ()(const EquipmentData& pstItem1, const EquipmentData pstItem2)
{
return pstItem1.eid < pstItem2.eid;
}
};
//降序排列
class CompGreater
{
public:
bool operator ()(const AllianceData& pstItem1, const AllianceData& pstItem2)
{
return pstItem1.alv > pstItem2.alv;
}
bool operator ()(const CommanderData& pstItem1, const CommanderData pstItem2)
{
return pstItem1.lv > pstItem2.lv;
}
bool operator ()(const EquipmentData& pstItem1, const EquipmentData pstItem2)
{
return pstItem1.eid > pstItem2.eid;
}
}; #endif // _CompHeloer_H_

总结:

排序的方法有很多中,可参考http://blog.csdn.net/aastoneaa/article/details/8471722

通过参考这个,我个人觉得函数对象的方法使用最方便,维护量少,而且统一。

C++ Vector 中自定义对象的排序的更多相关文章

  1. 【转载】C#中自定义Sort的排序规则IComparable接口

    C#中的List集合在排序的时候,如果不使用Lambda表达式进行排序的话,一般调用Sort()方法进行排序,如果希望Sort()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需 ...

  2. NSArray中的对象进行排序

    看在iOS中有哪些方法可以对NSArray中的对象进行排序.下面是目录: 小引 使用NSComparator进行排序 使用NSDescriptor进行排序 使用selector进行排序 小引 我们将要 ...

  3. Java基础知识强化之集合框架笔记69:Collections类之ArrayList存储自自定义对象并排序的案例

    1. ArrayList存储自自定义对象并排序的案例: ArrayList存储自自定义对象,并使用Collections对ArrayList存储基本包装类的元素排序. 2. 代码实现: (1)Stud ...

  4. std list/vector sort 自定义类的排序就是这么简单

    所以,自己研究了一下,如下:三种方式都可以,如重写<,()和写比较函数compare_index.但是要注意对象和对象指针的排序区别. 1.容器中是对象时,用操作符<或者比较函数,比较函数 ...

  5. 对list集合中的对象进行排序(转载)

    原文链接:http://blog.csdn.net/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元 ...

  6. List自定义对象的排序,根据对象的某一列进行排序

    在工作中,经常需要对List对象集合进行排序操作,下面总结下搞个通用排序对象,原理是使用JAVA的 Comparator    接口实现排序   不多说直接上“干货” 1.存在实体类: @Data @ ...

  7. 根据Value对Map中的对象进行排序

    背景 SortedMap的实现类TreeMap可以按自然顺序或自定义顺序遍历键(key),有时我们需要根据值(Value)进行排序,本文提供了一种简单实现思路. 实现 Comparator接口 使用V ...

  8. 如何根据对象的属性,对集合(list / set)中的对象进行排序

      一:针对list 通过java.util.Collections的sort方法,有2个参数,第一个参数是list对象,第二个参数是new Comparator<对象类>(){}方法,这 ...

  9. 根据List集合中的对象属性排序

    首先创建一个Student对象,里面有三个属性,分别是int类型,String类型,Date类型 package com.sinoway.cisp.test; import java.text.Sim ...

随机推荐

  1. js 拼接字符串时,本来想要’#1′ ,返回的却是’#01′

    今天在操作一个元素时,id值是拼接的. var index = $(this).attr(‘index’);    //0var id = ‘#’ + (index+1);    //#01$(id) ...

  2. iOS-UILabel加线

    NSAttributedString *attrStr =[[NSAttributedString alloc]initWithString:[NSString stringWithFormat:], ...

  3. centos7 下pycharm无法输入中文问题解决方案

    作者使用的pycharm是2017.2 在pycharm.sh脚本的如下行(大约在201行): # -------------------------------------------------- ...

  4. linux后台运行之screen和nohup

    3.1 nohup命令 如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令. 该命令可以在你退出帐户/关闭终端之后继续运行相应的进程. nohup就是不挂起的意 ...

  5. [STL] 如何将一个vector赋给另一个vector

    vector 有个函数assign, 可以帮助执行赋值操作. assign会清空你的容器. assign函数: 函数原型: void assign(const_iterator first,const ...

  6. 优先队列实现 大小根堆 解决top k 问题

      摘于:http://my.oschina.net/leejun2005/blog/135085 目录:[ - ] 1.认识 PriorityQueue 2.应用:求 Top K 大/小 的元素 3 ...

  7. 【题解】SDOI2017树点涂色

    LCT强强!以前总是觉得LCT非常的难懂(当然现在也是的),但实际上它真的是很厉害的一种东西.它是一种动态的链剖分结构,其实就是对于剖分出来的重链使用LCT去进行维护.cut 与 link 两个操作让 ...

  8. BZOJ3571 & 洛谷3236:[HNOI2014]画框——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3571 https://www.luogu.org/problemnew/show/P3236 小T ...

  9. HDU2089:不要62——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=2089 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管 ...

  10. bzoj3694: 最短路(树链剖分/并查集)

    bzoj1576的帮我们跑好最短路版本23333(双倍经验!嘿嘿嘿 这题可以用树链剖分或并查集写.树链剖分非常显然,并查集的写法比较妙,涨了个姿势,原来并查集的路径压缩还能这么用... 首先对于不在最 ...