let's define
struct A
{
int m;
...
}
std::vector<A> vec; //a large vector (magnitude of million members)
I am interested to find top 2% member of vec where the members have highest value in their m method.
For that I was thinking something like this:
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
}
Do you think of any faster solution?