c – 有效计算两个std :: multimap迭代器之间的条目数

前端之家收集整理的这篇文章主要介绍了c – 有效计算两个std :: multimap迭代器之间的条目数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在少于O(N)的时间内计算std :: multimap的两个迭代器之间的条目数.有没有任何技巧或聪明的方法来做到这一点?

由于std :: multimap具有双向迭代器,我的理解是像std :: distance这样的东西可以在O(N)时间内完成.

其他细节:multimap的键是N元组.我试图在多重映射中找到其键的第一个元素为0的条目数.它们键的第一个元素的选项是0和1,而multimap使用严格的弱排序,其中键的第一个元素永远是最重要的.即,所有带0的元素都来自任何带有1的元素.

上下文:迭代器由equal_range返回,它以对数时间运行.据说,我想测量范围的长度.

谢谢.

解决方法

您正在寻找的是在N3465中提出的所谓的 heterogeneous comparison lookup.它允许在用于存储密钥的equal_range成员函数中使用不同但兼容的比较函数.在您的情况下,查找比较运算符(第一个元组成员)将与元组词典比较不同但是一致.

不幸的是,根据this Q&A,该文件中只有一小部分被接受进入C 14标准草案.但是,N3465论文的作者也是已实施this feature的Boost.MultiIndex的作者.您可以通过关注Boost来emulate a std::multimap. MultiIndex文档.

一旦使用了改编的boost :: multiindex_container的通用equal_range成员函数,就可以在返回的迭代器上简单地执行std :: distance().对于equal_range的容器大小,复杂度将是对数,并且返回的迭代器范围的大小是线性的.如果您对结果不感兴趣但只对计数感兴趣,那么还有一个广义的count()成员函数在相同的对数线性时间内返回.

原文链接:https://www.f2er.com/c/119004.html

猜你在找的C&C++相关文章