c++ - 如何仅打印多重映射中的元素 n 次

标签 c++ dictionary vector multimap

我的多重映射有一个 int 作为键,一个 string 作为值。键是单词出现的次数,值是单词本身。我想,如果我用迭代器在 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() 如果它比那个小)。

关于c++ - 如何仅打印多重映射中的元素 n 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35234764/

相关文章:

c++ - 在 Visual Studio 中将二进制文件添加到资源

C# 从字典列表中获取所有键

c - 是否有C语言单词词典来完成功能?

c++ - 预期类型得到 Element c++

c++ - 如何从函数运算符(x,y)返回 vector 元素的引用

c++ - 如何正确地从 char 数组中删除一个字符(有或没有转换为字符串)?

c++ - 使用 std::unique_ptr<T>& 而不是 std::unique_ptr<T> 有什么优势吗?

c++ - 在动画 Opengl c/c++ 方面需要帮助

python - 在 Django 模板中循环字典的字典只需 1 行代码

apache-flex - 是否可以在ActionScript 3中定义通用类型Vector?