我的问题:
为QVector<Camera*>
中QVector
的每个int number
分配数字的最佳方式是什么,其中应遵循以下规范:
Camera
应保持其顺序QString macAddress
的{{1}}应根据其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
创建指向相同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()
编辑:我现在的问题是:有没有更好的方法来实现这个目标?
答案 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);
}