以下两种方法之间是否存在显着差异?方式 1 使用sort
或partial_sort
,具体取决于向量的大小,而方式 2 始终使用partial_sort
。我发现方式 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 比 sort 差得多(在我的用例中是 4 倍)。这表明方式 1 是首选。似乎 partial_sort 仅用于对整个范围的一小部分进行排序。我在 Visual Studio 2010 中进行了测试。