如何仅 n 次打印出多映射中的元素
How do I print out elements in a multimap ONLY n times
我的多重映射有一个 int 作为键,一个字符串作为值。键是单词出现的次数,值是单词本身。我想,如果我用迭代器在rbegin和rend处循环遍历多重映射,我可以循环遍历十次,而不是直到它到达末尾才能找到前十个单词。知道怎么做吗?
另一种选择是使用 std::advance
查找第十项(从 rbegin
开始)。这样,您将获得一个有效的范围,并且您可以使用常用算法等对其进行处理:
std::map<int, std::string> word_freqs;
auto first = word_freqs.rbegin();
auto last = std::next(first, 10);
现在,我们可以(例如)打印出这 10 个最常见的单词:
typedef std::pair<int, std::string> T;
std::ostream &operator<<(std::ostream &os, T const &t) {
return os << t.second << ": " << t.first;
}
std::copy(first, last, std::ostream_iterator<T>(std::cout, "n"));
当然,为了健壮性,您可能希望首先检查多重映射是否至少包含 10 个项目(如果小于此值,则可能只使用 rbegin()
和 rend()
)。
当然!这里有一个选项:
unsigned numTimes = 0;
for (auto itr = myMultiMap.rbegin();
itr != myMultiMap.rend() && numTimes < kMaxTimes;
++itr, ++numTimes) {
/* Do something with itr */
}
相关文章:
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除映射和分割错误中的一个过去结束元素
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 访问映射向量的映射元素(c++)
- 为什么 unordered_map::equal_range upper_bound 如果键小于第一个映射元素,则返回
- 根据类成员对同一密钥的多映射元素进行排序
- C++查找并擦除多映射元素
- C++ for_each循环找不到指向映射元素
- 创建映射元素时,请避免使用值副本
- 从常量迭代器到映射向量,获取映射向量中映射元素的键和值
- c++中如何更改映射元素的值
- 传递对映射元素的引用作为参数
- 如果没有找到映射元素将返回什么
- 不能访问指针-向量映射元素
- 存储内部排序映射元素的最快方式
- 无序多映射元素插入
- 哈希映射元素的值未正确打印
- 修改所有映射元素的键
- 复制映射元素的正确方法