以下两种方法之间是否存在显著差异?方法1使用sort或partial_sort,这取决于向量的大小,而方式2总是使用partial_sort。我觉得way 2更吸引人,因为我的谓词比示例中的要复杂一些,所以我不想重复它。但我不知道partial_sort的性能是否比sort差,因为它不打算用于对整个范围进行排序,这就是为什么我倾向于使用方法1。
int main()
{
std::vector<double> vec;
vec.push_back(1.0);
vec.push_back(3.0);
vec.push_back(2.0);
vec.push_back(5.0);
vec.push_back(4.0);
vec.push_back(9.0);
const size_t numBest = 3;
const size_t numTotal= vec.size();
#if WAY1
if (numTotal < numBest)
{
std::sort(vec.begin(), vec.end(), std::not2(std::less<double>()));
}
else
{
std::partial_sort(vec.begin(), vec.begin() + numBest, vec.end(), std::not2(std::less<double>()));
vec.resize(numBest);
}
#elif WAY2
{
const size_t numMiddle = numTotal < numBest ? numTotal : numBest;
std::partial_sort(vec.begin(), vec.begin() + numMiddle, vec.end(), std::not2(std::less<double>()));
vec.resize(numMiddle);
}
#endif
// now vec contains the largest numBest results.
return 0;
}一些测试表明,如果必须对整个范围进行排序,则partial_sort比排序差得多(在我的用法中是4倍)。这表明方式1是首选的。partial_sort似乎只用于对整个范围中的一小部分进行排序。我在2010中进行了测试。
https://stackoverflow.com/questions/45455345
复制相似问题