首页 > 解决方案 > 搜索向量成员 C++ 的前 n%

问题描述

让我们定义

struct A
{ 
int m;
...
}

std::vector<A> vec; //a large vector (magnitude of million members)

我有兴趣找到vec的前 2% 成员,其中成员在他们的m方法中具有最高价值。

为此,我在想这样的事情:

std::multimap<int, A> top_members;

const auto nr_top = std::lround(vec.size() * 0.02);
for (auto it = vec.begin(); it != vec.end(); ++it)
  {
  if(top_members.size() == nr_top + 1)
    top_members.erase(std::prev(top_members.end()));
  else
    top_members[it->m] = *it
  }

你有什么更快的解决方案吗?

标签: c++

解决方案


看起来像你想要partial_sort的。它会对你的 2% 的物品进行排序,剩下的 98% 基本上是随机排序的。


推荐阅读