std list/vector sort 自定义类的排序就是这么简单
所以,自己研究了一下,如下:三种方式都可以,如重写<,()和写比较函数compare_index。但是要注意对象和对象指针的排序区别。
1、容器中是对象时,用操作符<或者比较函数,比较函数参数是引用。
2、容器中是对象指针时,用()和比较函数排序都可以,比较函数参数是指针。
3、list用成员方法sort
4、vector用sort函数
- class TestIndex{
- public:
- int index;
- TestIndex(){
- }
- TestIndex(int _index):index(_index){
- }
- bool operator()(const TestIndex* t1,const TestIndex* t2){
- printf("Operator():%d,%d/n",t1->index,t2->index);
- return t1->index < t2->index;
- }
- bool operator < (const TestIndex& ti) const {
- printf("Operator<:%d/n",ti.index);
- return index < ti.index;
- }
- };
- bool compare_index(const TestIndex* t1,const TestIndex* t2){
- printf("CompareIndex:%d,%d/n",t1->index,t2->index);
- return t1->index < t2->index;
- }
- int main(int argc, char** argv) {
- list<TestIndex*> tiList1;
- list<TestIndex> tiList2;
- vector<TestIndex*> tiVec1;
- vector<TestIndex> tiVec2;
- TestIndex* t1 = new TestIndex(2);
- TestIndex* t2 = new TestIndex(1);
- TestIndex* t3 = new TestIndex(3);
- tiList1.push_back(t1);
- tiList1.push_back(t2);
- tiList1.push_back(t3);
- tiList2.push_back(*t1);
- tiList2.push_back(*t2);
- tiList2.push_back(*t3);
- tiVec1.push_back(t1);
- tiVec1.push_back(t2);
- tiVec1.push_back(t3);
- tiVec2.push_back(*t1);
- tiVec2.push_back(*t2);
- tiVec2.push_back(*t3);
- printf("tiList1.sort()/n");
- tiList1.sort();//无法正确排序
- printf("tiList2.sort()/n");
- tiList2.sort();//用<比较
- printf("tiList1.sort(TestIndex())/n");
- tiList1.sort(TestIndex());//用()比较
- printf("sort(tiVec1.begin(),tiVec1.end())/n");
- sort(tiVec1.begin(),tiVec1.end());//无法正确排序
- printf("sort(tiVec2.begin(),tiVec2.end())/n");
- sort(tiVec2.begin(),tiVec2.end());//用<比较
- printf("sort(tiVec1.begin(),tiVec1.end(),TestIndex())/n");
- sort(tiVec1.begin(),tiVec1.end(),TestIndex());//用()比较
- printf("sort(tiVec1.begin(),tiVec1.end(),compare_index)/n");
- sort(tiVec1.begin(),tiVec1.end(),compare_index);//用compare_index比较
- return 0;
- }
std list/vector sort 自定义类的排序就是这么简单的更多相关文章
- 【转】 std list/vector sort 排序
[转自]http://blog.csdn.net/marising/article/details/4567531 网上江湖郎中和蒙古大夫很多,因此,此类帖子也很多.关于排序,我还真没研究过,看了江湖 ...
- C++ Vector 中自定义对象的排序
需求: 客户端收到游戏中的所有联盟列表,现在需要按联盟的属性比如lv来进行排序. 数据存储: 每个联盟数据是一个对象,所有的联盟列表存在一个vector容器里面. 老的解决方法: 冒泡排序方法算法 新 ...
- [转] C++的STL库,vector sort排序时间复杂度 及常见容器比较
http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archive/2012/09/18/269 ...
- STL vector+sort排序和multiset/multimap排序比较
由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在 ...
- java学习--自定义类的实例的大小比较和排序
我们知道Object类有一个equals方法,用于比较两个对象是否相等 我们只要在自定义类中重写了equals方法(若不重写就是比较两个实例的地址,相当于==)就可以用来比较该类的两个实例是否相等 问 ...
- C#学习笔记(14)——C# 使用IComparer自定义List类的排序方案
说明(2017-7-17 21:34:59): 原文:https://my.oschina.net/Tsybius2014/blog/298702?p=1 另一篇比较好的:https://wenku. ...
- java面试题:已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义
package com.swift; import java.util.Arrays; import java.util.Comparator; public class ArrayThread_Te ...
- c++中std::set自定义去重和排序函数
c++中的std::set,是基于红黑树的平衡二叉树的数据结构实现的一种容器,因为其中所包含的元素的值是唯一的,因此主要用于去重和排序.这篇文章的目的在于探讨和分享如何正确使用std::set实现去重 ...
- 集合(一)-Java中Arrays.sort()自定义数组的升序和降序排序
默认升序 package peng; import java.util.Arrays; public class Testexample { public static void main(Stri ...
随机推荐
- 关于函数return的一些理解与小实例
先看代码: function example (){ var index=1; return {//像这种加个大括号的就是返回一个对象了,而不仅仅是一个值 index, net:function(){ ...
- jqury-validate表单验证
首先需要引入插件:jquery.validate.js这个插件. 然后对需要验证的表单实现js: $("#add-firewalls-form").validate({ submi ...
- 黑马day13 分页思路&实现
分页的总体思想: 分页包含什么: 1.当前页,每页显示的记录数,总的记录数,总的页码,集合List存放的是JavaBean,首页, 尾页,上一页,下一页 传递的參数:当前页,每页显示的记录数.这两个本 ...
- js图片懒加载(滚动加载)判断是否生效
一.什么是懒加载? 对未出现在视野范围内的图片先不进行加载,等到出现在视野范围才去加载. 二.为什么使用懒加载? 懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数. 理论性知识大家都有自 ...
- 【bzoj3288】Mato矩阵
题目大意:给定一个n阶行列式,第i行第j列为GCD(i,j),求这个行列式的值 高斯消元之后发现对角线上的东西是phi 于是线性筛出所有的欧拉函数即可 #include<algorithm> ...
- POJ 2636:Electrical Outlets
Electrical Outlets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9597 Accepted: 718 ...
- P1198 [JSOI2008]最大数(线段树)
P1198 [JSOI2008]最大数(线段树) 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值 ...
- 【前端】window.resize的优化
一.概述 window.resize事件会在窗口尺寸改变的时候触发,哪怕只是改变了1像素.所以当窗口进行拖动的时候会触发很多次,很容易就卡死. 虽然部分浏览器已经进行了一点优化,但这还不够. 二.优化 ...
- fck 属性配置大全
优化FCKeditor文件夹和文件: 下载FCKeditor并解压之后,会产生_samples和 editor两个文件夹和几个文件,全部删除以_开头的文件夹和文件,因为这些都是FCKeditor的一些 ...
- [App Store Connect帮助]五、管理构建版本(2)查看构建版本和文件大小
您可以查看您为某个 App 上传的所有构建版本,和由 App Store 创建的变体版本的大小.一些构建版本在该 App 发布到 App Store 上后可能不会显示. 必要职能:“帐户持有人”职能. ...