Set容器排序

最近项目在进行实时排序时需要有个算法能够快速的进行排序,进行一番测试及考量。现采用set容器,然后存放结构体的方式。

结构体如下所示:

 1 struct MatchData
 2 {
 3     uint32 m_score;
 4     int64 m_userid;
 5     uint32 m_medal;
 6     string m_name;
 7
 8     MatchData()
 9     {
10
11         this->m_score = 0;
12         this->m_userid = 0;
13         this->m_medal = 0;
14         this->m_name = "";
15     }
16
17     MatchData(uint32 score,int64 userid,uint32 medal,string strName)
18     {
19
20         this->m_score = score;
21         this->m_userid = userid;
22         this->m_medal = medal;
23         this->m_name = strName;
24     }
25
26     bool operator<(const struct MatchData & right)const   //重载<运算符
27     {
28         if(this->m_userid == right.m_userid)     //根据userid去重
29             return false;
30         else
31         {
32             if(this->m_score != right.m_score)
33             {
34                 return this->m_score > right.m_score;      //降序
35             }
36             else
37             {
38                 if ( this->m_medal != right.m_medal )
39                 {
40                     return this->m_medal > right.m_medal;
41                 }
42                 else
43                 {
44                     return this->m_userid > right.m_userid;
45                 }
46             }
47         }
48     }
49 };

只需要将需要的数据组成新的结构体然后插入到set容器中,就可以自动进行排序,效率方便还是可以的。在Debug模式下,排序10000人,所花时间在400毫秒左右。生成release后运行,效率将会再次提升。

set<MatchData> setMatchRank;//排行榜
MatchData temp;
temp.m_score = 100;
temp.m_userid = 1;
temp.m_medal = 10
temp.m_name = “test”;
setMatchRank.insert(temp);

时间: 2024-10-13 21:13:42

Set容器排序的相关文章

Java用vector容器排序

Java用vector容器排序 /** * 功能:定义一个Student数组,其中保存学生的基本信息,包括姓名,学号,性别,还有三门课的成绩 * 和课程对应的学分,计算出学分积,降序排序 * 时间:2014年6月4日16:33:24 * 作者:cutter_point */ package com.lesson4; import java.util.*; public class Demo4_10 { public static void main(String [] args) { //吧成绩

java自定义容器排序的两种方法

首先说一下排序的返回值的含义.对于参与比较的两个Object,o1和o2,如果函数的返回值为正值,把o1排在o2后面:返回值为负值,把o1排在o2前面.如果返回值是0,按照容器之前的顺序排列.在compareTo中,this相当于o1,传入的Object相当于o2 第一种方法:对于要排序的类实现Comparable接口 package sort; import java.util.ArrayList; import java.util.Collections; import java.util.

list?容器?排序函数.xml

pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9;font-style:italic;font-weight:bold;} .selfFuc{color:#f1f9be;} .bool{color:#69305e;} .condition{color:#628698;font-weight:bold;} .key{color:#e336b6;} .

stl std::map容器排序及使用注意事项 .

01.#include "stdafx.h" 02.#include <map> 03.#include <iostream> 04. 05.int _tmain(int argc, _TCHAR* argv[]) 06.{ 07. /** 08. * map中的每个元素都是一个pair类型 09. * 对于插入其中的元素都会默认按键值升序排列好 10. */ 11. 12. std::map<int, int> m; 13. m.insert(st

容器排序

1 //用于sort中的比较函数,定义为ServiceImpl的静态成员函数,比较Book对象中的m_loan_times成员, 降序排序,同时为了能访问Book类中的私有成员,在Book类中声明为友元函数 2 bool ServiceImpl::big_borrow(Book b1,Book b2) 3 { 4 if(b1.m_loan_times > b2.m_loan_times) 5 { 6 return true; 7 } 8 return false; 9 } 10 11 12 //

c++ 容器排序

#include <algorithm> #include <functional> #include <array> #include <iostream> using namespace std; int main() { array<int, 10> s = {5, 7, 4, 2, 8, 6, 1, 9, 0, 3}; // 用默认的 operator< 排序 sort(s.begin(), s.end());//升序 for (a

C++11 STL容器 排序

1 struct temp{ int __iValue; int __iKey; }; 2 temp __Stru1 = { 100,100}; 3 temp __Stru2 = { 2,-10 }; 4 temp __Stru3 = { 200,1 }; 5 temp __Stru4 = { 600,2 }; 6 7 std::list<temp*> test_list; 8 test_list.push_back(&__Stru1); 9 test_list.push_back(&

中国电信翼支付2014编程大赛决赛-一种排序 个人解题过程

首先需要表明的是我在时限内想到这个解法,但是这个解法被判错,而我也想不到反例.赛后咨询举办方的时候,他们表示过几天会发测试数据给我们.所以今天就先把思路和代码先放上来,过几天收到数据再看看到底哪里错了. 如果有读者想到相应的反例,希望可以给我留言,谢谢. 题目详情(只限Java) 给定一串整数,你只能进行两种操作:任选一个整数放到这串数之前,或者这串之后.所有的整数都不相等. 问把这串整数变为由小到大的排好序最少需要的操作次数. 输入格式: 多组数据,每组数据1行,包含若干个空格分隔的非负整数,

C++ 容器一些细节

参考:http://www.cnblogs.com/answeryi/archive/2011/12/16/2289811.html: 目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五章 算法 第六章 函数 第七章 在程序中使用STL ==================================================== 第1章