Qt: найти ближайший QVector3D в QMap

у меня есть QMap, как это:

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

Мне нужна функция, вход которой является QVector3D, а выход - ближайший ключ к входному вектору.

Например:

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

Любые идеи, как решить эту проблему?


person Michael    schedule 22.11.2016    source источник


Ответы (1)


просто пройдитесь по карте и проверьте расстояния:

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;
}
person Tomas    schedule 22.11.2016