我发现 std::sort 仅对 1000 个项目进行排序非常慢。
在类模板template <typename T> class TableModel : public QAbstractTableModel
中,我具有以下对表格进行排序的功能。
template<typename T>
void TableModel<T>::sort(int column, Qt::SortOrder order = Qt::AscendingOrder) {
if(order == Qt::AscendingOrder) {
qSort(m_list.begin(), m_list.end(), less<T>(column));
} else {
qSort(m_list.begin(), m_list.end(), greater<T>(column));
}
reset();
}
我注意到如果我只有随机洗牌,我的桌子就是洗牌然后立即显示。所以这让我认为它的排序很慢。谁能帮我加快 QTable 的排序?
这是较少的结构。
template<typename T>
struct less {
int index;
less(int index) : index(index) {}
bool operator()(const T& first, const T& second) {
return T::less(first, second, index);
}
};
T::less 是一个函数,它所做的只是根据给定的索引进行比较。
当我稍后需要处理大约 100,000 个项目时,慢被定义为仅 1000 个项目的 5 秒。