对指向自定义对象的指针的QVector进行排序

时间:2017-12-27 09:02:14

标签: c++ qt sorting pointers qvector

我的问题:

QVector<Camera*>QVector的每个int number分配数字的最佳方式是什么,其中应遵循以下规范:

  • 未分类的Camera应保持其顺序
  • 每个QString macAddress的{​​{1}}应根据其int number
  • 进行分配
  • 对于“最低”的macAddress(0),QString::operator<应以class Camera { int number; QString macAddress; } 开头

来源:

Camera::operator<

当前解决方案:

我的解决方案是:

  • 实施bool Camera::operator<(const Camera &cam) const { return(this->macAddress < cam.macAddress); }

    struct CameraCompare {
        bool operator()(const Camera *a, const Camera *b) {
            return(*a < *b);
        }
    }
    
  • 实施比较结构

    std::sort
  • 创建指向相同Camera-objects的指针的临时QVector,然后在临时向量上使用QVector<Camera*> tempVector; for(quint8 i = 0; i < cameras->size(); i++) { Camera *temp = (*cameras)[i]; tempVector.append(temp); } std::sort(tempVector.begin(), tempVector.end(), CameraCompare()); for(quint8 i = 0; i < tempVector.size(); i++) { tempVector[i]->setNumber(i); // Edited } 并分配如下数字:

    substr()

编辑:我现在的问题是:有没有更好的方法来实现这个目标?

1 个答案:

答案 0 :(得分:1)

您的解决方案没有任何问题。它对矢量进行了精细排序。但似乎这里出现了问题:

for(quint8 i = 0; i < tempVector.size(); i++) {
    cameras->at(i)->setNumber(i);
}

此代码设置每个摄像机的number原始向量中的索引,而不是排序向量。我认为它应该替换为:

for(quint8 i = 0; i < tempVector.size(); i++) {
    int number = tempVector.indexOf(cameras.at(i));
    cameras->at(i)->setNumber(number);
}