Qt排序问题

原创 2013年09月25日 09:29:05

很久没有写点东西了,最近忙着赶一个Qt项目,用到了很多Qt的基础知识,什么是Qt就不做介绍了,可以去网上搜一下,有很多讲Qt的文章。在用它的过程中我发现网上很少能找到比较深入的知识点讲解,可能是用它做开发的人比较少吧。

今天我要描述的不是排序算法问题,因为排序算法很多,比如插入排序(直接插入排序、希尔排序)、交换排序(冒泡排序、快速排序)、选择排序(直接选择排序、堆排序)、基数排序和归并排序,网上有很多讲解,这里就不做叙述。今天要讲的是Qt对模板中的元素进行排序。通过查MSDN可以知道,C++SDK中的模板类基本上都有自带的排序函数,可以直接使用,但是Qt的模板类没有自带这样的函数,而是通过一个函数名是qSort的对模板的元素进行排序。

有一定的C++开发经验的都应该知道,如果要对模板中的元素进行排序,前提是元素类型必须可以比较,标准的来说要实现对运算符"<"的重载。这样,模板在对元素进行排序的时候就可以对元素进行比较,然后进行排序。下面是一个运算符重载的一个小例子。

class TestMatchData
{
public:
	int m_index;//通过比较这个变量实现类实例的比较
	QString m_str;
	TestMatchData(int index,QString str)//构造函数
	{
		m_index = index;
		m_str = str;
	}
	TestMatchData()
	{
	}
	friend bool operator < (const TestMatchData &data1,const TestMatchData &data2)//实现运算符"<"的重载
	{
		if(data1.m_index < data2.m_index)return true;
		return false;
	}
};
实现了对模板元素类中比较运算符"<"的重载之后就可以对进行模板元素排序了。

	QVector<TestMatchData> maps = QVector<TestMatchData>();
	/***
	*		向QVector中添加TestMatchData的实例
	*/
	qSort(maps.begin(), maps.end());//实现了对QVector中元素的排序

在用这个方法之前,我用的是QMap,通过键值对实现排序,但是最后发现个问题,就是如果后续插入的元素的键值与前面已经插入的有重复会将前面插入的元素覆盖,所以赶紧找另外的方法,也就是这个方法。

查Qt的帮助文档可以看到,qSort这个函数的排序方法的快速排序,所以效率很高,不用担心。

void qSort ( RandomAccessIterator begin, RandomAccessIterator end )
Sorts the items in range [begin, end) in ascending order using the quicksort algorithm.
当然qSort这个函数不只是可以对QVector的元素进行排序,对QList等多个模板类也可以进行排序。


版权声明:本文为博主原创文章,未经博主允许不得转载。

纠结的QList 排序

今天做stdlib 中的QList 排序 ,在QT环境下   马上想到了qsort  可是呢 qsort用了半天发现不可行  功 能: 使用快速排序例程进行排序 用 法: void q...
  • xmaoh234
  • xmaoh234
  • 2013年01月17日 12:11
  • 10509

rename函数功能

rename函数功能是给一个文件重命名,用该函数可以实现文件移动功能,把一个文件的完整路径的盘符改一下就实现了这个文件的移动。 1 头文件: stdio.h 2 声明: int rename(char...

Qt之qSort

Qt中可以使用qSort可以对容器排序,助手中有很多示例,大多数关于int、QString的排序,今天这里主要讲解qSort如何对结构体进行排序的。 Qt对整形排序: QList li...

QT实现可拖拽排序的表格

  • 2017年09月26日 02:28
  • 67KB
  • 下载

Qt之QHeaderView自定义排序(终极版)

简述本节主要解决自定义排序衍生的第二个问题-将整形显示为字符串,而排序依然正常。下面我们主要介绍两种方案: 通过委托实现绘制 添加辅助数据(添加隐藏列) 简述 委托绘制 效果 QStyledItemD...

qt文件读取,数据排序

  • 2017年12月01日 13:24
  • 677KB
  • 下载

【Qt入门实践】单选按钮、多选按钮、QString、排序示例

一  案例:----排序--利用STL里的容器、算法 在主界面里 添加 控件: 5个 LineEdit ----用于放置 数字  1 PushButton ----用于 触发 排序 ...

拓扑排序问题

  • 2017年11月08日 23:35
  • 117KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt排序问题
举报原因:
原因补充:

(最多只允许输入30个字)