首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当对整个范围进行排序时,std::partial_sort()相对于std::sort()的性能?

当对整个范围进行排序时,std::partial_sort()相对于std::sort()的性能?
EN

Stack Overflow用户
提问于 2017-08-02 08:21:22
回答 2查看 2.9K关注 0票数 8

以下两种方法之间是否存在显著差异?方法1使用sortpartial_sort,这取决于向量的大小,而方式2总是使用partial_sort。我觉得way 2更吸引人,因为我的谓词比示例中的要复杂一些,所以我不想重复它。但我不知道partial_sort的性能是否比sort差,因为它不打算用于对整个范围进行排序,这就是为什么我倾向于使用方法1。

代码语言:javascript
复制
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中进行了测试。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45455345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档