c++ - 搜索向量成员 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
}
你有什么更快的解决方案吗?
解决方案
看起来像你想要partial_sort
的。它会对你的 2% 的物品进行排序,剩下的 98% 基本上是随机排序的。