如何仅 n 次打印出多映射中的元素

How do I print out elements in a multimap ONLY n times

本文关键字:映射 元素 何仅 打印      更新时间:2023-10-16

我的多重映射有一个 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 */
}