2016-11-22 2 views
2

i ont un QMap comme ceci:Qt: Trouver le plus proche QVector3D dans QMap

"1" (0.183,-0.232,0.747) 
"2" (1.232, 1.322,-0.123) etc. 

je besoin d'une fonction qui est entrée un QVector3D et dont la sortie est le plus proche clé du vecteur d'entrée.

Par exemple:

InputVector(0.189,-0.234,0.755) -> Output: "1" 

Toute idée comment résoudre ce problème?

Répondre

0

juste itérer la carte et vérifiez les distances:

int getClosestKey(const QVector3D & ref, const QMap<int, QVector3D> & map) 
{ 
    int closestKey = -1; 
    double minDistance = std::numeric_limits<double>::max(); 
    for (auto itr = map.constBegin(); itr != map.constEnd(); ++itr) 
    { 
     double d = ref.distanceToPoint(itr.value()); 
     if (d > minDistance) 
     continue; 

     closestKey = itr.key(); 
     minDistance = d; 
    } 

    return closestKey; 
}