如何根据它们的值获取std :: map的前n个键?有没有办法,我可以得到一个说明的列表,例如最大价值的前十个键作为他们的价值?
假设我们有一个类似于此的地图:
mymap["key1"]= 10;
mymap["key2"]= 3;
mymap["key3"]= 230;
mymap["key4"]= 15;
mymap["key5"]= 1;
mymap["key6"]= 66;
mymap["key7"]= 10;
Run Code Online (Sandbox Code Playgroud)
而且我只想要一个前10个键的列表,它与另一个键相比具有更大的价值.例如,mymap的前4位是
key3
key6
key4
key1
key10
Run Code Online (Sandbox Code Playgroud)
注意:
值不是唯一的,实际上它们是每个键的出现次数.我想获得大多数发生的密钥列表
注意2:
如果地图不是一个好的候选人,你想提出任何建议,请按照c ++ 11进行,我当时不能使用提升.
注3:
在使用的情况下,std::unordered_multimap<int,wstring>
我还有其他选择吗?
hmj*_*mjd 20
a的顺序map
是基于它的键而不是它的值,并且不能重新排序,因此有必要迭代map
并维护前十个遇到的列表,或者由Potatoswatter用于评论,以便为您partial_sort_copy()
提取前N个值:
std::vector<std::pair<std::string, int>> top_four(4);
std::partial_sort_copy(mymap.begin(),
mymap.end(),
top_four.begin(),
top_four.end(),
[](std::pair<const std::string, int> const& l,
std::pair<const std::string, int> const& r)
{
return l.second > r.second;
});
Run Code Online (Sandbox Code Playgroud)
见在线演示.
选择不同类型的容器可能更合适,boost::multi_index
值得研究,其中:
...允许构造容器,维护一个或多个具有不同排序和访问语义的索引.
归档时间: |
|
查看次数: |
4877 次 |
最近记录: |