C++ Vector 中自定义对象的排序
需求:
客户端收到游戏中的所有联盟列表,现在需要按联盟的属性比如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 中自定义对象的排序的更多相关文章
- 【转载】C#中自定义Sort的排序规则IComparable接口
C#中的List集合在排序的时候,如果不使用Lambda表达式进行排序的话,一般调用Sort()方法进行排序,如果希望Sort()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需 ...
- NSArray中的对象进行排序
看在iOS中有哪些方法可以对NSArray中的对象进行排序.下面是目录: 小引 使用NSComparator进行排序 使用NSDescriptor进行排序 使用selector进行排序 小引 我们将要 ...
- Java基础知识强化之集合框架笔记69:Collections类之ArrayList存储自自定义对象并排序的案例
1. ArrayList存储自自定义对象并排序的案例: ArrayList存储自自定义对象,并使用Collections对ArrayList存储基本包装类的元素排序. 2. 代码实现: (1)Stud ...
- std list/vector sort 自定义类的排序就是这么简单
所以,自己研究了一下,如下:三种方式都可以,如重写<,()和写比较函数compare_index.但是要注意对象和对象指针的排序区别. 1.容器中是对象时,用操作符<或者比较函数,比较函数 ...
- 对list集合中的对象进行排序(转载)
原文链接:http://blog.csdn.net/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元 ...
- List自定义对象的排序,根据对象的某一列进行排序
在工作中,经常需要对List对象集合进行排序操作,下面总结下搞个通用排序对象,原理是使用JAVA的 Comparator 接口实现排序 不多说直接上“干货” 1.存在实体类: @Data @ ...
- 根据Value对Map中的对象进行排序
背景 SortedMap的实现类TreeMap可以按自然顺序或自定义顺序遍历键(key),有时我们需要根据值(Value)进行排序,本文提供了一种简单实现思路. 实现 Comparator接口 使用V ...
- 如何根据对象的属性,对集合(list / set)中的对象进行排序
一:针对list 通过java.util.Collections的sort方法,有2个参数,第一个参数是list对象,第二个参数是new Comparator<对象类>(){}方法,这 ...
- 根据List集合中的对象属性排序
首先创建一个Student对象,里面有三个属性,分别是int类型,String类型,Date类型 package com.sinoway.cisp.test; import java.text.Sim ...
随机推荐
- iOS开发自定义试图切换
CATransition *transition = [CATransition animation]; transition.duration = 1.0f; transition.timingFu ...
- 3dContactPointAnnotationTool开发日志(十)
要是那几个状态栏不能拖动的话岂不是显得太呆板了,于是我又参考Unity官方视频教程学习了如何实现拖动状态栏的功能,还挺简单的. 比如说要拖动这个PanelStatus面板,我只让使用者通过拖动 ...
- MindManager2018 修改过期时间 配置文件路径
路径:C:\Users\likui\AppData\Roaming\MindManager\MindManager2018.ini 文件中记录了安装时间和最后一次启动时间. [MindManager] ...
- C# 中的 Async 和 Await
这篇文章由Filip Ekberg为DNC杂志编写. 自跟随着.NET 4.5 及Visual Studio 2012的C# 5.0起,我们能够使用涉及到async和await关键字的新的异步模式.有 ...
- Python自定义包在linux服务器导入错误的解决办法
在本地机器上跑python代码,自己定义的文件进行导包运行是没有问题,但是放到linux服务器上的时候就会提示 ImportError:No module named xxxx(要导入的文件包名) 在 ...
- wpf DataGrid加载行号
<DataGrid Name="tkdg" HorizontalContentAlignment="Center" AutoGenerateColumns ...
- shell脚本学习—Shell执行脚本
Shell作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行这一条,这种方式称为交互式,但还有另一种执行命令的方式称为批处理方式,用户事先写一个Shell脚本,Shell可以一次把这些命 ...
- axios post提交数据格式不对的问题
需要格式化一下 this.$http({ method: "post", url: "/chinacountry/index.php/home/Search/index& ...
- BZOJ1597 土地购买 【dp + 斜率优化】
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 5466 Solved: 2035 [Submi ...
- 洛谷 P1363 幻想迷宫 解题报告
P1363 幻想迷宫 题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:mo ...