需求:

客户端收到游戏中的所有联盟列表,现在需要按联盟的属性比如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. UVA725 Division (暴力求解法入门)

    uva 725 Division Write a program that finds and displays all pairs of 5-digit numbers that between t ...

  2. 通过access_token openid获取微信用户昵称等信息

    <?php header('Access-Control-Allow-Origin:*'); $access_token = !empty($_GET['access_token'])?$_GE ...

  3. anaconda安装不存在的包

    Anaconda作为一个工具包集成管理工具,下载python工具包是很方便的,直接敲: conda install package_name 1 但是有时候安装一个工具包(如skimage)的时候,在 ...

  4. 【Linux】- Ubuntu守护进程supervisor

    linux的守护进程类似于windows的服务.linux通过supervisor创建守护进程. 1.安装supervisor sudo apt-get install supervisor 安装成功 ...

  5. 一个比较典型的WMI查询

    Get-WmiObject win32_bios -ComputerName server1, server2 | Format-Table ` @{n='Hostname';e={$_.__serv ...

  6. chrome扩展程序中以编程方式插入内容脚本不生效的问题

    chrome扩展程序中内容脚本有两种插入方式:(https://crxdoc-zh.appspot.com/extensions/content_scripts) 1. 清单文件: 这种方式会在打开每 ...

  7. 获得system32等系统文件权限

    SYSTEM是至高无上的超级管理员帐户.默认情况下,我们无法直接在登录对话框上以SYSTEM帐户的身份登录到Windows桌面环境.实际上SYSTEM帐户早就已经“盘踞”在系统中了.根据http:// ...

  8. BER-TLV数据结构

    本文是自身在研究学习过程中碰到的问题,整理而成. 为了便于后文的引用说明,先列出一段TLV结构的数据: [6F] 4D │ ├─[] A0000003330101 │ ├─[A5] │ │ ├─[] ...

  9. 【题解】51nod1967 路径定向

    第一次写欧拉回路,实际上只要dfs下去就可以了,反正每条边都是要遍历一遍的…… 关键有两个性质:1.一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图.2.一个有向图存在欧拉回路 ...

  10. cf 443 D. Teams Formation](细节模拟题)

    cf 443 D. Teams Formation(细节模拟题) 题意: 给出一个长为\(n\)的序列,重复\(m\)次形成一个新的序列,动态消除所有k个连续相同的数字,问最后会剩下多少个数(题目保证 ...