我有一张地图,其中包含不同的字符串以及它们出现的次数。我想找到第N个最常出现的键,并按降序排序。是否有可以执行此操作的STL功能?如果不是,在地图容器中执行此操作的有效方法是什么?
数据结构:
map<string, unsigned int>
以下是我的地图示例:
答案 0 :(得分:2)
以下可能会有所帮助:
struct comp
{
using P = std::pair<const std::string, std::size_t>;
bool operator() (const P&lhs, const P& rhs) const
{
return rhs.second < lhs.second;
}
};
int main(int argc, char *argv[])
{
const std::map<std::string, std::size_t> m = {{"a", 1}, {"b", 4}, {"c", 2}};
std::vector<std::pair<std::string, std::size_t>> res(2);
std::partial_sort_copy (begin(m), end(m), begin(res), end(res), comp());
for (const auto& e : res) {
std::cout << e.first << " " << e.second << std::endl;
}
return 0;
}
输出:
b 4
c 2
答案 1 :(得分:0)
我没有时间发布工作代码,但这是你可以做的事情:
1)你可以制作另一个多图&lt; int,string&gt;
2)使用矢量&lt;对&gt;
但如果有多个元素,这些将占用很多空间。所以,高效方法应该是:
我想找到第N个最常出现的密钥,并按降序排序。
如果N
不大,最好创建一个大小为N
的堆,其中每个节点都包含对&gt; 。