Ich habe einen Vektor einer benutzerdefinierten Klasse und möchte diesen Vektor sortieren. Es gibt 3 Attribute, auf deren Grundlage die Sortierung erfolgen kann. Ich verwende die Lambda-Funktion, um das Attribut zu erfassen, auf dessen Basis der Vektor sortiert werden soll. Ich erhalte jedoch Compilerfehler. Ich bin Einfügen den Code unten:Sortierung von STL-Containern mit Lambda-Funktionen
mapNode * PhotonMap::createTree(int start, int end)
{
mapNode *n = new mapNode();
if (end - start == 0)
{
n->node.sPosition.setVector(pMap[end].sPosition);
n->node.pPower.setVector(pMap[end].pPower);
n->sAxis = -1;
n->left = NULL;
n->right = NULL;
return n;
}
BBox box;
if (!(end - start + 1 == pMap.size()))
box.setBBox(computeBox(start, end));
int splitAxis = decodeSplitAxis(box.getMaxSpreadAxis());
n->sAxis = splitAxis;
std::sort(pMap[start], pMap[end], [splitAxis](Photon &first, Photon &second) ->bool { return (first.sPosition.getValue(splitAxis) > second.sPosition.getValue(splitAxis)); });
int mIndex = floor((start + end)/2);
n->node.sPosition.setVector(pMap[mIndex].sPosition);
n->node.pPower.setVector(pMap[mIndex].pPower);
if (mIndex == start)
{
//this means end - start = 1. There will be no left node!
n->left = NULL;
n->right = createTree(mIndex + 1, end);
return n;
}
else {
n->left = createTree(start, mIndex);
n->right = createTree(mIndex + 1, end);
return n;
}
}
Die Fehler Ich erhalte sind die folgenden:
Fehler C2784: ‚unknown-Typ std :: operator - (std :: move_iterator < _RanIt> & , const std :: move_iterator < _RanIt2> &): std :: move_iterator < _RanIt> & 'von 'Photon'
Fehler C2784: '' konnte nicht Template-Argument für ableiten' unknown-Typ std :: operator - (Nachteile t std :: reverse_iterator < _RanIt> &, const std :: reverse_iterator < _RanIt2> &) ': konnte nicht für Template-Argument ableiten 'const std :: reverse_iterator < _RanIt> &' von '' Photon
Fehler C2676: binär ‚-‘: ‚_Sort‘:: keine Übereinstimmungen überladene Funktion gefunden
Fehler C2780
: ‚VOID std‚Photon‘nicht diesen Operator oder eine Umwandlung in einen TypFehler C2672 akzeptabel auf den vordefinierten Bediener nicht definiert :: _ Sort (_RanIt, _RanIt, _Diff, _Pr) ': erwartet 4 Argumente - 3 zur Verfügung gestellt
Photon
ist ein struct
. Seine Erklärung ist:
typedef struct Photon {
Vector sPosition;
Vector iDirection;
Vector pPower;
Vector norm;
} Photon;
Vector
ein class
dessen sind private Mitglieder:
int length;
void allocateMemory(void);
float vector[3];