c++ max_element 每n个元素

2024-03-20

有没有办法比较每 N 个元素来找到容器中的最大元素并返回索引。使用 STL、BOOST 或...其他库?

对于每个 N,我的意思是使用 std::max_element,但将 for 的增加从 ++first 更改为 first += n;

// based on std::max_element

#ifndef NEWTON_ALGORITHM_SEARCH_MAX_INDEX_HPP
#define NEWTON_ALGORITHM_SEARCH_MAX_INDEX_HPP

#include <iterator>

#include <newton/functional.hpp>

namespace newton {

  // SAME THAT STD::MAX_ELEMENT
  template<class ForwardIt, class Compare>
  const ForwardIt max_index(ForwardIt first, ForwardIt last, Compare comp)
  {

    if ( newton::equal(first, last) ) // newton::equal is basically equivalent to std::equal_to
      return last;

    ForwardIt largest = first;
    while ( newton::not_equal(++first, last) )
      if (comp(*largest, *first))
        largest = first;

    return largest;

  }

  // possible names
  // max_index_some
  // max_index_every_n
  // max_index__n

  template<class ForwardIt, class Size, class Compare>
  const ForwardIt max_index_every_n(ForwardIt first, ForwardIt last, Size n, Compare comp)
  {

    if ( newton::equal(first, last) )
      return last;

    ForwardIt largest = first;
    Size blocks = std::distance(first, last) / n; // integer blocks

    if ( newton::greater_equal(blocks, 1) ) {

      // if there are exacly N elements, can't sum example
      // v.size() = 10, first start in 0, so "0 += 10" is "10", but last index is "9"
      // but if mod >= 1, then index is at least 10, so can sum

      if ( newton::greater_equal( std::distance(first, last) % n, 1) ) {
        for (size_t i = 1; newton::less_equal(i, blocks); ++i, first += n) {

          if (comp(*largest, *first))
            largest = first;
        }
      }
      else {

        for (size_t i = 1; newton::less(i, blocks); ++i, first += n) {

          if (comp(*largest, *first))
            largest = first;
        }

      }

    }

    return largest;

  }

  template<class ForwardIt>
  const ForwardIt max_index(ForwardIt first, ForwardIt last)
  {
    return max_index(first, last, newton::structure::less());
  }
} // newton

如果没有,您的解决方案是什么,尝试将其包含在下一个 STL 版本中。remember https://www.youtube.com/watch?v=h4Jl1fk3MkQ


With range-v3 https://github.com/ericniebler/range-v3, 这将是:

auto r = v | ranges::view::stride(n);
auto it = ranges::max_element(r);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ max_element 每n个元素 的相关文章

随机推荐

  • 我应该如何将字典编码为 HTTP GET 查询字符串?

    HTTP GET 查询字符串是键 值对的有序序列 spam eggs spam ham foo bar 在某些语义下 相当于以下字典 spam eggs ham foo bar 这恰好适用于所请求页面的布尔属性 expand 1 expan
  • 使用 LINQ2SQL 插入新的子级+父级

    与 LINQ2SQL 作斗争 我是新手 到目前为止一切都还好 但这个问题确实让我悲伤 我有两个对象 父对象和子对象 定义如下 Table Name Parent public class Parent Column IsPrimaryKey
  • 关闭时似乎有 6 个泄漏的信号量对象需要清理 warnings.warn('resource_tracker: 似乎有 %d

    我正在尝试通过 python 3 8 在我的 Firebase 实时数据库上进行测试连接 我有两个脚本 一个是wdata 写入数据 另一个是rdata 读取数据 wdata py 是 from firebase import firebas
  • shell 脚本删除文件(如果已存在)

    我正在研究一些将数据存储在文件中的东西 但每次我运行脚本时 它都会附加到前一个文件中 我需要有关如何删除该文件 如果该文件已存在 的帮助 不必费心检查该文件是否存在 只需尝试将其删除即可 rm f p a t h or rm p a t h
  • Python:获取字符串的大小(以字节为单位)

    我有一个要通过网络发送的字符串 我需要检查它所表示的总字节数 sys getsizeof string name 返回额外的字节 例如对于sys getsizeof a 返回 22 而在 python 中 一个字符仅用 1 个字节表示 还有
  • Java 应用程序不显示输出

    这是我更新的代码 package car1 公共类主要 公共静态无效主 字符串 args HondaCivic 类实现 car1 int speed 0 int rpm 0 int gear 1 public void speedUp in
  • 如何使用 Jersey REST 处理服务不可用的情况

    我有一个与 Spring 集成的球衣 RESTful 服务 web xml 中映射的基本 url 是 rest 我的服务等级如下 Resource Scope request Path service Component public cl
  • 如何在角度材料2中选择默认项目选择多个

    我正在开发 Angular 2 Material 应用程序 我有一个情况 其中存在多选元素 并且我有一个带有复选框的列表 因此我可以一次选择多个项目 我可以使用角度材质组件来实现这一点 但我想要的是默认检查 2 3 个项目 如果我选择 取消
  • Laravel 5 在测试之间重新播种数据库以进行单元测试

    我从一个种子数据库开始 并尝试在 Laravel 5 的单元测试之间重新种子数据库 在 Laravel 4 中 我知道您可以简单地使用 Illuminate Support Facades Artisan 并运行命令 Artisan cal
  • 为什么java.nio.files.Path中没有Path构造函数?

    Path 类没有记录的构造函数 但可以通过以下方式创建实例 Paths get 这是FileSystems getDefault getPath 那么有人可以解释这个设计决策吗 有人可以解释这个设计决定吗 这是因为 JSR 203 允许从多
  • ManageUserViewModel 类在哪里?

    我使用 ASP Net MVC 5 EF 6 和 Net 4 5 1 创建了一个项目 在某些时候 我需要更改项目所在的命名空间 从 MyTestProject 更改为 MyRealProject 在整个网站上进行这些更改后 我现在在一些视图
  • 避免贫血域模型 - 一个真实的例子

    我试图理解贫血领域模型以及为什么它们被认为是反模式 这是一个现实世界的例子 我有一个 Employee 类 它有大量的属性 姓名 性别 用户名等 public class Employee public string Name get se
  • WCF 与 Java 兼容吗?

    哪些 WCF 服务协议与 Java 配合得很好 TCP 服务绑定是否可与 java 远程处理 Corba EJB JMS 等 配合使用 作为服务端点公开的 Web 服务又如何呢 这些是否已经针对通用 Java WebServices 堆栈进
  • 如何为特定目录设置open_basedir

    我有一个目录 htdocs unsecured我想限制该目录或其子目录中的任何内容访问该目录之外的任何内容 在哪里以及如何设置open basedir仅适用于此目录 您可以设置open basedir在您的 Apache 配置文件 php
  • 将 git lfs ls-files 与 git ls-files ':(attr:filter=lfs)' 进行比较是否是检测不受 lfs 管理的 lfs 文件的可靠方法?

    我尝试找到一种方法来确定 git 存储库中的文件是否由 git lfs 正确管理 到目前为止 我发现比较结果git lfs ls files and git ls files attr filter lfs 似乎给了我我想要的 Add Ty
  • Ruby 相当于“grep -C 5”来获取匹配周围行的上下文?

    我对此进行了一些搜索 但我一定使用了错误的术语 ruby 是否有办法 grep 查找字符串 正则表达式并返回周围的 5 行 上面和下面 我知道我可以打电话 grep C 5 或者甚至编写我自己的方法 但这似乎是 ruby 拥有的东西 而我只
  • Mac 上的 auctex 和 emacs

    我想要的是能够成功使用 emacs 和 auctex 一些系统信息 ProductName Mac OS X ProductVersion 10 8 5 BuildVersion 12F45 Emacs Version 24 3 9 0 A
  • 如何在 iPad 版 Objective C 中解析 PDF

    我一直在解析 PDF 文件 请指导我如何做到这一点 头文件 PDFViewer h interface PDFViewer UIView CGPDFDocumentRef pdf void drawInContext CGContextRe
  • 如何通过 XSLT 在 Java 中合并 2 个 XML 流

    我想在 Java 中合并 2 个 XML 流 字符串 必须通过 XSLT 我可以更改转换 但问题是 XML 作为字符串出现 有很多例子 但是通过文件 可以在不将它们保存在文件中的情况下完成此操作吗 Thanks 我只知道一种使用自己的实现的
  • c++ max_element 每n个元素

    有没有办法比较每 N 个元素来找到容器中的最大元素并返回索引 使用 STL BOOST 或 其他库 对于每个 N 我的意思是使用 std max element 但将 for 的增加从 first 更改为 first n based on