我的问题:
在Camera
中为每个QVector<Camera*>
分配数字的最佳方法是什么,其中应遵循以下规范:
QVector
应该保持秩序int number
指定每个Camera
的QString macAddress
int number
)资料来源:
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
此代码设置每个摄像机的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);
}