Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实现自己的排序算法,而不是QSortFilterProxyModel_C++_Qt_Qt5_Model View - Fatal编程技术网

C++ 实现自己的排序算法,而不是QSortFilterProxyModel

C++ 实现自己的排序算法,而不是QSortFilterProxyModel,c++,qt,qt5,model-view,C++,Qt,Qt5,Model View,我有一个使用QSortFilterProxy模型的表。它还负责根据用户单击的特定列对元素进行排序。现在我发现,当表格显示大约10000个元素时,速度非常慢,可能需要几秒钟。整个过程是不可复制的,这取决于色谱柱的预分类方式,它可能需要更长的时间——但并非在所有情况下都如此 QSortFilterProxyModel中的排序函数是一些非常奇怪的东西,其中的部分被排序和洗牌,等等……我不太明白那里到底发生了什么 因此,我的想法是创建一个自己的模型,该模型继承自QSortFilterProxyModel

我有一个使用QSortFilterProxy模型的表。它还负责根据用户单击的特定列对元素进行排序。现在我发现,当表格显示大约10000个元素时,速度非常慢,可能需要几秒钟。整个过程是不可复制的,这取决于色谱柱的预分类方式,它可能需要更长的时间——但并非在所有情况下都如此

QSortFilterProxyModel中的排序函数是一些非常奇怪的东西,其中的部分被排序和洗牌,等等……我不太明白那里到底发生了什么

因此,我的想法是创建一个自己的模型,该模型继承自QSortFilterProxyModel,但实现了自己的排序功能-与QSortFilterProxyModel类似,但以更高效的方式实现(STL排序功能应该可以完成这项工作,因为它对我的数据非常快速)

所以我的问题是:我该怎么做?我必须实现什么才能拥有自己的排序功能?还是有更好的方法来加速标准QSortFilterProxy模型


谢谢

重新实现
虚拟QSortFilterProxyModel::sort()
有什么问题

注意,Qt实现已经使用STL(
std::stable_sort()
)来进行实际排序。 排序的问题是,您需要以某种方式找到已排序项的源索引。这让事情变得有点复杂。如果没有任何级联代理模型,则映射很简单,不会花费太多时间


总结:我不认为你会比Qt代码快。

看看。你的模型的
data()
方法是如何返回值的?调用100000次慢吗?@G.M.这是一种比较方法,这怎么会对使用的排序算法产生影响?因为它本质上允许您定义排序算法使用的比较算法——就像您可以提供自己的
operator@G.M.对不起,我不明白:是的,它允许您替换/定义比较。但比较只是排序算法的一小部分。当我更改比较时,这将如何影响调用此比较函数的排序算法的工作原理和效率?