C++ 实现自己的排序算法,而不是QSortFilterProxyModel
我有一个使用QSortFilterProxy模型的表。它还负责根据用户单击的特定列对元素进行排序。现在我发现,当表格显示大约10000个元素时,速度非常慢,可能需要几秒钟。整个过程是不可复制的,这取决于色谱柱的预分类方式,它可能需要更长的时间——但并非在所有情况下都如此 QSortFilterProxyModel中的排序函数是一些非常奇怪的东西,其中的部分被排序和洗牌,等等……我不太明白那里到底发生了什么 因此,我的想法是创建一个自己的模型,该模型继承自QSortFilterProxyModel,但实现了自己的排序功能-与QSortFilterProxyModel类似,但以更高效的方式实现(STL排序功能应该可以完成这项工作,因为它对我的数据非常快速) 所以我的问题是:我该怎么做?我必须实现什么才能拥有自己的排序功能?还是有更好的方法来加速标准QSortFilterProxy模型C++ 实现自己的排序算法,而不是QSortFilterProxyModel,c++,qt,qt5,model-view,C++,Qt,Qt5,Model View,我有一个使用QSortFilterProxy模型的表。它还负责根据用户单击的特定列对元素进行排序。现在我发现,当表格显示大约10000个元素时,速度非常慢,可能需要几秒钟。整个过程是不可复制的,这取决于色谱柱的预分类方式,它可能需要更长的时间——但并非在所有情况下都如此 QSortFilterProxyModel中的排序函数是一些非常奇怪的东西,其中的部分被排序和洗牌,等等……我不太明白那里到底发生了什么 因此,我的想法是创建一个自己的模型,该模型继承自QSortFilterProxyModel
谢谢 重新实现
虚拟QSortFilterProxyModel::sort()
有什么问题
注意,Qt实现已经使用STL(std::stable_sort()
)来进行实际排序。
排序的问题是,您需要以某种方式找到已排序项的源索引。这让事情变得有点复杂。如果没有任何级联代理模型,则映射很简单,不会花费太多时间
总结:我不认为你会比Qt代码快。看看。你的模型的
data()
方法是如何返回值的?调用100000次慢吗?@G.M.这是一种比较方法,这怎么会对使用的排序算法产生影响?因为它本质上允许您定义排序算法使用的比较算法——就像您可以提供自己的operator@G.M.对不起,我不明白:是的,它允许您替换/定义比较。但比较只是排序算法的一小部分。当我更改比较时,这将如何影响调用此比较函数的排序算法的工作原理和效率?