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

问题描述 投票:1回答:1

我的问题:

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

  • 未分类的QVector应该保持秩序
  • 应根据其int number指定每个CameraQString macAddress
  • qazxsw poi应该从qazxsw poi开始为“最低”的mac地址(int number

资料来源:

0

当前解决方案

我目前的解决方案是:

  • 实施QString::operator< class Camera { int number; QString macAddress; }
  • 实现比较结构 Camera::operator<
  • 创建指向相同Camera-objects的指针的临时QVector,然后在临时向量上使用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); } }

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

c++ qt sorting pointers qvector
1个回答
1
投票

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

std::sort

此代码设置每个摄像机的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 } ,它在原始矢量中的索引而不是排序矢量。我认为它应该替换为:

for(quint8 i = 0; i < tempVector.size(); i++) {
    cameras->at(i)->setNumber(i);
}
© www.soinside.com 2019 - 2024. All rights reserved.