- контейнер, который сортирует себя на основе числового сравнения ключей (например, 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;
Однако давайте скажем, пользователю не нужен допуск с плавающей точкой 1e-3.
Каков самый простой способ заставить эту функцию сравнения использовать переменный допуск во время выполнения? Я не против заново создавать и пересортировать карту на основе нового компаратора каждый раз при обновлении эпсилона.
Другие сообщения об изменении после инициализации и использовании чисел с плавающей запятой здесь. поскольку ключи здесь не дают полного решения.
Подробнее здесь: https://stackoverflow.com/questions/211 ... -in-stdmap
Мобильная версия