Толерантный поиск ключей в std::mapC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Толерантный поиск ключей в std::map

Сообщение Anonymous »

Требования:

  • контейнер, который сортирует себя на основе числового сравнения ключей (например, std::map )
  • проверьте наличие ключа на основе допуска с плавающей запятой (например, map.find() и используйте собственный компаратор)
  • и самый сложный вариант: число с плавающей запятой допуск, используемый компаратором, может быть изменен пользователем во время выполнения!

Первые 2 могут быть выполняется с использованием карты с пользовательским компаратором:

Код: Выделить всё

struct floatCompare : public std::binary_function
{
bool operator()( const float &left, const float &right ) const
{
return (fabs(left - right) > 1e-3) && (left < right);
}
};

typedef std::map< float, float, floatCompare > floatMap;
Используя эту реализацию, floatMap.find( 15.0001 ) найдет на карте значение 15.0.

Однако давайте скажем, пользователю не нужен допуск с плавающей точкой 1e-3.
Каков самый простой способ заставить эту функцию сравнения использовать переменный допуск во время выполнения? Я не против заново создавать и пересортировать карту на основе нового компаратора каждый раз при обновлении эпсилона.

Другие сообщения об изменении после инициализации и использовании чисел с плавающей запятой здесь. поскольку ключи здесь не дают полного решения.

Подробнее здесь: https://stackoverflow.com/questions/211 ... -in-stdmap
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»