C++ STL 是否对 NaN 进行排序检查?
Does C++ STL sort check for NaN?
我在 Armadillo 库中使用排序函数,但它一直触发 NaN 错误,当我手动检查时这些错误不存在...所以我切换到 STL 排序函数并且它起作用了!所以我的好奇心是,STL 排序函数如何处理 NaN?
Does C++ STL sort check for NaN?
std::sort
使用您为其提供的比较功能。如果您的函数 "checks for NaN",那么 std::sort
也是通过比较函数来实现的。如果您不提供比较功能,则默认使用 std::less
。它使用运算符 <
。 <
与 NaN 的行为不满足 std::sort
的要求,如果您尝试对包含 NaN 的范围进行排序(除非您提供自定义比较函数),该行为将是未定义的。
我在 Armadillo 库中使用排序函数,但它一直触发 NaN 错误,当我手动检查时这些错误不存在...所以我切换到 STL 排序函数并且它起作用了!所以我的好奇心是,STL 排序函数如何处理 NaN?
Does C++ STL sort check for NaN?
std::sort
使用您为其提供的比较功能。如果您的函数 "checks for NaN",那么 std::sort
也是通过比较函数来实现的。如果您不提供比较功能,则默认使用 std::less
。它使用运算符 <
。 <
与 NaN 的行为不满足 std::sort
的要求,如果您尝试对包含 NaN 的范围进行排序(除非您提供自定义比较函数),该行为将是未定义的。