Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting c++;和nan一起排序。为什么排序不能正确退出 我想用C++中的“排序”来排序一个双向量(有几个楠值)。我希望在向量的后面对NaN进行重新排序(我可以使用“remove”函数对值进行预处理,但我只是好奇为什么我当前的代码不起作用)。对于特定的一组输入,程序不会退出。正在讨论的方案如下: vector<double> A{0.257367, 0.256835, 0.257094, 0.257067, 0.256707, 0.256724, 0.257166, 0.0/0.0, 0.256541, 0.257119, 0.257065, 0.256937, 0.257075, 0.257067, 0.256778, 0.256989, 0.256664, 0.256466, 0.25707, 0.256889, 0.257136, 0.0/0.0, 0.256843, 0.256323, 0.256931, 0.256404, 0.256392, 0.256405, 0.256047, 0.25633, 0.255451, 0.0/0.0, 0.256026, 0.255875, 0.255754, 0.25613, 0.256278, 0.256115, 0.0/0.0, 0.256074, 0.256172, 0.256126, 0.256565, 0.256807, 0.256279, 0.256289, 0.256787, 0.256945, 0.256397, 0.0/0.0, 0.256816, 0.256775, 0.256734, 0.0/0.0, 0.256915, 0.256919, 0.257003, 0.256906, 0.256338, 0.255988, 0.249046, 0.249932, 0.249964, 0.249632, 0.250288, 0.250855, 0.251464, 0.251631, 0.252197, 0.25324, 0.253315, 0.253456, 0.254093, 0.25427, 0.254699, 0.254919, 0.255061, 0.255149, 0.25572, 0.255897, 0.25569, 0.256172, 0.256007, 0.256331, 0.256378, 0.256324, 0.256773, 0.256473, 0.25679, 0.256372, 0.238573, 0.239315, 0.239328, 0.240574, 0.241281, 0.242129, 0.243075, 0.24391, 0.243958, 0.245451, 0.245936, 0.247785, 0.248352, 0.24831, 0.249264, 0.25075, 0.2513, 0.251976, 0.252656, 0.253461, 0.254081, 0.254723, 0.254764, 0.255449, 0.0/0.0, 0.255802, 0.2563, 0.256352, 0.256758, 0.256187, 0.224057, 0.225205, 0.225888, 0.227081, 0.228535, 0.229993, 0.230934, 0.232928, 0.233696, 0.235631, 0.237125, 0.238275, 0.239589, 0.241336, 0.24238, 0.244349, 0.244904, 0.246259, 0.248209, 0.248963, 0.250566, 0.252173, 0.252602, 0.253539, 0.254274, 0.255162, 0.255254, 0.255673, 0.256347, 0.25615, 0.20776, 0.209018, 0.209901, 0.211938, 0.213811, 0.215881, 0.217347, 0.219078, 0.220714, 0.223599, 0.224932, 0.22725, 0.229422, 0.231103, 0.233058, 0.236197, 0.237434, 0.239692, 0.241409, 0.243654, 0.24602}; // If do this, the program will exit correctly: // A.pop_back(); // sort. auto cmp=[](const double &d1, const double &d2){ if (isnan(d2)) return true; return d1<d2; }; sort(A.begin(),A.end(),cmp); // print. for (auto &item:A) cout << item << " "; cout << endl; 向量A{0.257367, 0.256835, 0.257094, 0.257067, 0.256707, 0.256724, 0.257166, 0.0/0.0, 0.256541, 0.257119, 0.257065, 0.256937, 0.257075, 0.257067, 0.256778, 0.256989, 0.256664, 0.256466, 0.25707, 0.256889, 0.257136, 0.0/0.0, 0.256843, 0.256323, 0.256931, 0.256404, 0.256392, 0.256405, 0.256047, 0.25633, 0.255451, 0.0/0.0, 0.256026, 0.255875, 0.255754, 0.25613, 0.256278, 0.256115, 0.0/0.0, 0.256074, 0.256172, 0.256126, 0.256565, 0.256807, 0.256279, 0.256289, 0.256787, 0.256945, 0.256397, 0.0/0.0, 0.256816, 0.256775, 0.256734, 0.0/0.0, 0.256915, 0.256919, 0.257003, 0.256906, 0.256338, 0.255988, 0.249046, 0.249932, 0.249964, 0.249632, 0.250288, 0.250855, 0.251464, 0.251631, 0.252197, 0.25324, 0.253315, 0.253456, 0.254093, 0.25427, 0.254699, 0.254919, 0.255061, 0.255149, 0.25572, 0.255897, 0.25569, 0.256172, 0.256007, 0.256331, 0.256378, 0.256324, 0.256773, 0.256473, 0.25679, 0.256372, 0.238573, 0.239315, 0.239328, 0.240574, 0.241281, 0.242129, 0.243075, 0.24391, 0.243958, 0.245451, 0.245936, 0.247785, 0.248352, 0.24831, 0.249264, 0.25075, 0.2513, 0.251976, 0.252656, 0.253461, 0.254081, 0.254723, 0.254764, 0.255449, 0.0/0.0, 0.255802, 0.2563, 0.256352, 0.256758, 0.256187, 0.224057, 0.225205, 0.225888, 0.227081, 0.228535, 0.229993, 0.230934, 0.232928, 0.233696, 0.235631, 0.237125, 0.238275, 0.239589, 0.241336, 0.24238, 0.244349, 0.244904, 0.246259, 0.248209, 0.248963, 0.250566, 0.252173, 0.252602, 0.253539, 0.254274, 0.255162, 0.255254, 0.255673, 0.256347, 0.25615, 0.20776, 0.209018, 0.209901, 0.211938, 0.213811, 0.215881, 0.217347, 0.219078, 0.220714, 0.223599, 0.224932, 0.22725, 0.229422, 0.231103, 0.233058, 0.236197, 0.237434, 0.239692, 0.241409, 0.243654, 0.24602}; //如果执行此操作,程序将正确退出: //A.弹回(); //排序。 自动cmp=[](常数双精度和d1、常数双精度和d2){ if(isnan(d2))返回true; 返回d1_Sorting_Nan - Fatal编程技术网

Sorting c++;和nan一起排序。为什么排序不能正确退出 我想用C++中的“排序”来排序一个双向量(有几个楠值)。我希望在向量的后面对NaN进行重新排序(我可以使用“remove”函数对值进行预处理,但我只是好奇为什么我当前的代码不起作用)。对于特定的一组输入,程序不会退出。正在讨论的方案如下: vector<double> A{0.257367, 0.256835, 0.257094, 0.257067, 0.256707, 0.256724, 0.257166, 0.0/0.0, 0.256541, 0.257119, 0.257065, 0.256937, 0.257075, 0.257067, 0.256778, 0.256989, 0.256664, 0.256466, 0.25707, 0.256889, 0.257136, 0.0/0.0, 0.256843, 0.256323, 0.256931, 0.256404, 0.256392, 0.256405, 0.256047, 0.25633, 0.255451, 0.0/0.0, 0.256026, 0.255875, 0.255754, 0.25613, 0.256278, 0.256115, 0.0/0.0, 0.256074, 0.256172, 0.256126, 0.256565, 0.256807, 0.256279, 0.256289, 0.256787, 0.256945, 0.256397, 0.0/0.0, 0.256816, 0.256775, 0.256734, 0.0/0.0, 0.256915, 0.256919, 0.257003, 0.256906, 0.256338, 0.255988, 0.249046, 0.249932, 0.249964, 0.249632, 0.250288, 0.250855, 0.251464, 0.251631, 0.252197, 0.25324, 0.253315, 0.253456, 0.254093, 0.25427, 0.254699, 0.254919, 0.255061, 0.255149, 0.25572, 0.255897, 0.25569, 0.256172, 0.256007, 0.256331, 0.256378, 0.256324, 0.256773, 0.256473, 0.25679, 0.256372, 0.238573, 0.239315, 0.239328, 0.240574, 0.241281, 0.242129, 0.243075, 0.24391, 0.243958, 0.245451, 0.245936, 0.247785, 0.248352, 0.24831, 0.249264, 0.25075, 0.2513, 0.251976, 0.252656, 0.253461, 0.254081, 0.254723, 0.254764, 0.255449, 0.0/0.0, 0.255802, 0.2563, 0.256352, 0.256758, 0.256187, 0.224057, 0.225205, 0.225888, 0.227081, 0.228535, 0.229993, 0.230934, 0.232928, 0.233696, 0.235631, 0.237125, 0.238275, 0.239589, 0.241336, 0.24238, 0.244349, 0.244904, 0.246259, 0.248209, 0.248963, 0.250566, 0.252173, 0.252602, 0.253539, 0.254274, 0.255162, 0.255254, 0.255673, 0.256347, 0.25615, 0.20776, 0.209018, 0.209901, 0.211938, 0.213811, 0.215881, 0.217347, 0.219078, 0.220714, 0.223599, 0.224932, 0.22725, 0.229422, 0.231103, 0.233058, 0.236197, 0.237434, 0.239692, 0.241409, 0.243654, 0.24602}; // If do this, the program will exit correctly: // A.pop_back(); // sort. auto cmp=[](const double &d1, const double &d2){ if (isnan(d2)) return true; return d1<d2; }; sort(A.begin(),A.end(),cmp); // print. for (auto &item:A) cout << item << " "; cout << endl; 向量A{0.257367, 0.256835, 0.257094, 0.257067, 0.256707, 0.256724, 0.257166, 0.0/0.0, 0.256541, 0.257119, 0.257065, 0.256937, 0.257075, 0.257067, 0.256778, 0.256989, 0.256664, 0.256466, 0.25707, 0.256889, 0.257136, 0.0/0.0, 0.256843, 0.256323, 0.256931, 0.256404, 0.256392, 0.256405, 0.256047, 0.25633, 0.255451, 0.0/0.0, 0.256026, 0.255875, 0.255754, 0.25613, 0.256278, 0.256115, 0.0/0.0, 0.256074, 0.256172, 0.256126, 0.256565, 0.256807, 0.256279, 0.256289, 0.256787, 0.256945, 0.256397, 0.0/0.0, 0.256816, 0.256775, 0.256734, 0.0/0.0, 0.256915, 0.256919, 0.257003, 0.256906, 0.256338, 0.255988, 0.249046, 0.249932, 0.249964, 0.249632, 0.250288, 0.250855, 0.251464, 0.251631, 0.252197, 0.25324, 0.253315, 0.253456, 0.254093, 0.25427, 0.254699, 0.254919, 0.255061, 0.255149, 0.25572, 0.255897, 0.25569, 0.256172, 0.256007, 0.256331, 0.256378, 0.256324, 0.256773, 0.256473, 0.25679, 0.256372, 0.238573, 0.239315, 0.239328, 0.240574, 0.241281, 0.242129, 0.243075, 0.24391, 0.243958, 0.245451, 0.245936, 0.247785, 0.248352, 0.24831, 0.249264, 0.25075, 0.2513, 0.251976, 0.252656, 0.253461, 0.254081, 0.254723, 0.254764, 0.255449, 0.0/0.0, 0.255802, 0.2563, 0.256352, 0.256758, 0.256187, 0.224057, 0.225205, 0.225888, 0.227081, 0.228535, 0.229993, 0.230934, 0.232928, 0.233696, 0.235631, 0.237125, 0.238275, 0.239589, 0.241336, 0.24238, 0.244349, 0.244904, 0.246259, 0.248209, 0.248963, 0.250566, 0.252173, 0.252602, 0.253539, 0.254274, 0.255162, 0.255254, 0.255673, 0.256347, 0.25615, 0.20776, 0.209018, 0.209901, 0.211938, 0.213811, 0.215881, 0.217347, 0.219078, 0.220714, 0.223599, 0.224932, 0.22725, 0.229422, 0.231103, 0.233058, 0.236197, 0.237434, 0.239692, 0.241409, 0.243654, 0.24602}; //如果执行此操作,程序将正确退出: //A.弹回(); //排序。 自动cmp=[](常数双精度和d1、常数双精度和d2){ if(isnan(d2))返回true; 返回d1

Sorting c++;和nan一起排序。为什么排序不能正确退出 我想用C++中的“排序”来排序一个双向量(有几个楠值)。我希望在向量的后面对NaN进行重新排序(我可以使用“remove”函数对值进行预处理,但我只是好奇为什么我当前的代码不起作用)。对于特定的一组输入,程序不会退出。正在讨论的方案如下: vector<double> A{0.257367, 0.256835, 0.257094, 0.257067, 0.256707, 0.256724, 0.257166, 0.0/0.0, 0.256541, 0.257119, 0.257065, 0.256937, 0.257075, 0.257067, 0.256778, 0.256989, 0.256664, 0.256466, 0.25707, 0.256889, 0.257136, 0.0/0.0, 0.256843, 0.256323, 0.256931, 0.256404, 0.256392, 0.256405, 0.256047, 0.25633, 0.255451, 0.0/0.0, 0.256026, 0.255875, 0.255754, 0.25613, 0.256278, 0.256115, 0.0/0.0, 0.256074, 0.256172, 0.256126, 0.256565, 0.256807, 0.256279, 0.256289, 0.256787, 0.256945, 0.256397, 0.0/0.0, 0.256816, 0.256775, 0.256734, 0.0/0.0, 0.256915, 0.256919, 0.257003, 0.256906, 0.256338, 0.255988, 0.249046, 0.249932, 0.249964, 0.249632, 0.250288, 0.250855, 0.251464, 0.251631, 0.252197, 0.25324, 0.253315, 0.253456, 0.254093, 0.25427, 0.254699, 0.254919, 0.255061, 0.255149, 0.25572, 0.255897, 0.25569, 0.256172, 0.256007, 0.256331, 0.256378, 0.256324, 0.256773, 0.256473, 0.25679, 0.256372, 0.238573, 0.239315, 0.239328, 0.240574, 0.241281, 0.242129, 0.243075, 0.24391, 0.243958, 0.245451, 0.245936, 0.247785, 0.248352, 0.24831, 0.249264, 0.25075, 0.2513, 0.251976, 0.252656, 0.253461, 0.254081, 0.254723, 0.254764, 0.255449, 0.0/0.0, 0.255802, 0.2563, 0.256352, 0.256758, 0.256187, 0.224057, 0.225205, 0.225888, 0.227081, 0.228535, 0.229993, 0.230934, 0.232928, 0.233696, 0.235631, 0.237125, 0.238275, 0.239589, 0.241336, 0.24238, 0.244349, 0.244904, 0.246259, 0.248209, 0.248963, 0.250566, 0.252173, 0.252602, 0.253539, 0.254274, 0.255162, 0.255254, 0.255673, 0.256347, 0.25615, 0.20776, 0.209018, 0.209901, 0.211938, 0.213811, 0.215881, 0.217347, 0.219078, 0.220714, 0.223599, 0.224932, 0.22725, 0.229422, 0.231103, 0.233058, 0.236197, 0.237434, 0.239692, 0.241409, 0.243654, 0.24602}; // If do this, the program will exit correctly: // A.pop_back(); // sort. auto cmp=[](const double &d1, const double &d2){ if (isnan(d2)) return true; return d1<d2; }; sort(A.begin(),A.end(),cmp); // print. for (auto &item:A) cout << item << " "; cout << endl; 向量A{0.257367, 0.256835, 0.257094, 0.257067, 0.256707, 0.256724, 0.257166, 0.0/0.0, 0.256541, 0.257119, 0.257065, 0.256937, 0.257075, 0.257067, 0.256778, 0.256989, 0.256664, 0.256466, 0.25707, 0.256889, 0.257136, 0.0/0.0, 0.256843, 0.256323, 0.256931, 0.256404, 0.256392, 0.256405, 0.256047, 0.25633, 0.255451, 0.0/0.0, 0.256026, 0.255875, 0.255754, 0.25613, 0.256278, 0.256115, 0.0/0.0, 0.256074, 0.256172, 0.256126, 0.256565, 0.256807, 0.256279, 0.256289, 0.256787, 0.256945, 0.256397, 0.0/0.0, 0.256816, 0.256775, 0.256734, 0.0/0.0, 0.256915, 0.256919, 0.257003, 0.256906, 0.256338, 0.255988, 0.249046, 0.249932, 0.249964, 0.249632, 0.250288, 0.250855, 0.251464, 0.251631, 0.252197, 0.25324, 0.253315, 0.253456, 0.254093, 0.25427, 0.254699, 0.254919, 0.255061, 0.255149, 0.25572, 0.255897, 0.25569, 0.256172, 0.256007, 0.256331, 0.256378, 0.256324, 0.256773, 0.256473, 0.25679, 0.256372, 0.238573, 0.239315, 0.239328, 0.240574, 0.241281, 0.242129, 0.243075, 0.24391, 0.243958, 0.245451, 0.245936, 0.247785, 0.248352, 0.24831, 0.249264, 0.25075, 0.2513, 0.251976, 0.252656, 0.253461, 0.254081, 0.254723, 0.254764, 0.255449, 0.0/0.0, 0.255802, 0.2563, 0.256352, 0.256758, 0.256187, 0.224057, 0.225205, 0.225888, 0.227081, 0.228535, 0.229993, 0.230934, 0.232928, 0.233696, 0.235631, 0.237125, 0.238275, 0.239589, 0.241336, 0.24238, 0.244349, 0.244904, 0.246259, 0.248209, 0.248963, 0.250566, 0.252173, 0.252602, 0.253539, 0.254274, 0.255162, 0.255254, 0.255673, 0.256347, 0.25615, 0.20776, 0.209018, 0.209901, 0.211938, 0.213811, 0.215881, 0.217347, 0.219078, 0.220714, 0.223599, 0.224932, 0.22725, 0.229422, 0.231103, 0.233058, 0.236197, 0.237434, 0.239692, 0.241409, 0.243654, 0.24602}; //如果执行此操作,程序将正确退出: //A.弹回(); //排序。 自动cmp=[](常数双精度和d1、常数双精度和d2){ if(isnan(d2))返回true; 返回d1,sorting,nan,Sorting,Nan,我不确定为什么A.pop_back()可以使它工作,但是如果您更改 auto cmp=[](const double &d1, const double &d2){ if (isnan(d2)) return true; return d1<d2; }; 它将按预期工作 我假设,因为您没有检查d1是否为nan,所以无法将两者与d1进行比较谢谢您的回答!嗯……我尝试了您的代码,它工作了!然后我交换了两个“if”的顺序语句,它停止了工作。这很有趣!但我想我明

我不确定为什么
A.pop_back()
可以使它工作,但是如果您更改

auto cmp=[](const double &d1, const double &d2){
    if (isnan(d2)) return true;
    return d1<d2;
}; 
它将按预期工作


我假设,因为您没有检查
d1
是否为nan,所以无法将两者与
d1进行比较谢谢您的回答!嗯……我尝试了您的代码,它工作了!然后我交换了两个“if”的顺序语句,它停止了工作。这很有趣!但我想我明白了重点。比较器必须是正确的。我不确定它是如何工作的,但首先检查
d1
是一种好的做法。如果这对您有效,请介意接受它作为答案吗?原因是,如果d1=d2=nan,OP的比较器将返回true,而它应该返回urn false表示相等值。将if(isnan(d1))添加到开头会有所帮助。
auto cmp=[](const double &d1, const double &d2){
    if (isnan(d1)) return false;
    if (isnan(d2)) return true;
    return d1<d2;
};