STL:为向量编写“where”运算符

2024-04-22

我需要根据几个布尔谓词找到向量中的索引。

ex:

vector<float> v;
vector<int> idx;

idx=where( bool_func1(v), bool_func2(v), ... );

申报方式是什么**where**函数,以便在向量上使用几个用户定义的布尔函数?

谢谢 阿曼.

一周后编辑

我用模板做了一些复杂的解决方案。但实际上人们可以使用已经预定义的valarray为了我的任务。这是代码片段,也许人们会发现它很有用:

  double dr=Rc/(double)Nbins, r;
  sigma.resize(Nbins);
  rr=sigma;
  valarray<double> vz(&data.vz[0], data.vz.size());
  double mvel=vz.sum()/(double)vz.size();
  for(size_t i=0l;i<Nbins;i++)
   {
   r=dr*i;
   valarray<bool> ids = (dist < r+dr) && (dist > r);//The magic valarray<bool>
   if(ids.max())
    {
    valarray<double> d=vz[ids];//we can use indirect operation.
    d-=mvel;
    d=pow(d,2.0);
    sigma[i]= sqrt(d.sum()/(double)d.size());
    rr[i]=r;
    cout<<i<<") "<<r<<" "<<sigma[i]<<endl;
    }
   }

让你的 bool_xxx 函数实际上是特定类型的函子(标签调度就足够了)。然后覆盖 ||和 && 以便这些运算符返回 bool_and 或 bool_or。然后你可以像这样使用 bool_ 谓词:


std::find_if(vect.begin(), vect.end(), bool_x1() || bool_x2() && (bool_x3() || bool_x4() && bool_x5()));

如果您想编写一个“where”函数,那么您显然希望使用一组不同的 bool_xxx 函数多次执行此操作。即使你知道你现在想要某种类型的作品,你也可以让它尽可能通用。我就是这样做的。

Edit:

基于此评论:@Jerry:例如我需要知道: id=where(v 1.0);稍后我想知道: id=where(v 你可能会更好地使用 boost::lambda:


namespace l = boost::lambda;
std::find_if(vect.begin(), vect.end(), l::_1 < 10.0 && l::_1 > 1.0);
std::find_if(vect.begin(), vect.end(), l::_1 < l::bind(fun, l::_1));

或者,如果您讨厌 lambda 或不允许使用它...或者只是想要一个稍微好一点的语法(但无法直接使用函数),那么只需创建您自己的占位符类型并覆盖它以在运算符 等...

Edit2:这是一个未经测试的地方,它将迭代器向量返回到所有匹配的对象:


template < typename ForwardIter, typename Predicate >
std::vector<ForwardIter> where(ForwardIter beg, ForwardIter end, Predicate pred)
{
  ForwardIter fit = std::find_if(beg,end,pred);
  if (fit == end) return std::vector<ForwardIter>();

  ForwardIter nit = fit; ++nit;
  std::vector<ForwardIter> collection = where(nit,end,pred);
  collection.push_front(fit);
  return collection;
}

它是递归的,在某些实现上可能会很慢,但有一种方法可以做到这一点。

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

STL:为向量编写“where”运算符 的相关文章

随机推荐

  • 如何使用ipad的objective-c发送/接收soap对象

    我一直在尝试为 ipad 编写一个 Objective C 应用程序来发送 接收肥皂网络服务 我已经写了一个代码 但它给出了一个错误 网络服务正在在线运行 这是我的代码 IBAction invokeService txt1 resignF
  • 使用 Calendar.getInstance() 与 new GregorianCalendar() 获取当前日期时间

    使用获取日期时间之间可能有什么区别 Calendar getInstance vs new GregorianCalendar 在源码中寻找日历 getInstance http download oracle com javase 6 d
  • SendKeys 在 Fraps 上不起作用

    对于那些不熟悉 frap 的人 它的屏幕录制程序可以通过快捷键触发 我正在使用 SendKeys SendWait 调用来触发 fraps 我注意到这不会触发 fraps 来录制任何视频 但如果我手动按下该键 fraps 就会被录制 有没有
  • 具有代理设置的 AWS API Gateway 自定义授权方 - 将自定义标头添加到请求

    我拥有的 AWS API 网关设置为代理 proxy 自定义 Auth 函数 用于授权此代理设置的传入请求 自定义身份验证函数正在通过 上下文 对象传递我想要传递给请求的附加信息 如下所示 principalId yyyyyyyy 政策文件
  • symfony2 twig 渲染,抛出异常

    所以在我的基本模板中 我有 render EcsCrmBundle Module checkClock 然后我创建了 ModuleController php
  • NuGet 中的包依赖项解析和命名冲突

    在我的工作团队中 我们依赖两个 NuGet 源 来自 NuGet org 的官方源用于公共包 文件服务器上的文件夹用于内部包 这对我们来说效果很好 但我认为我们有一个潜在的问题 看起来 NuGet 根据包名称和版本号来解析依赖项 由于只有一
  • React hooks 状态没有在日志中更新

    如果我写 function Component const isLoading setLoading useState true const request gt setLoading true console log isLoading
  • 如何将action分派到特定的reducer?

    我有多个减速器 每个减速器都有一个类型 INIT 我想要实现的是 从触发动作的位置来看 只有相关的减速器才能接收该动作 有没有中间件可以做到这一点 您在创建减速器时是否重复使用减速器逻辑 你可以尝试这样的事情 function create
  • 如何应用结构偏移?

    我有一个结构 typedef struct foo int lengthOfArray1 int lengthOfArray2 int array1 int array2 foo 我需要为整个结构及其数组的内容分配足够的内存 所以假设每个数
  • C# Var 与 Target 类型的 new

    C 9 was 正式宣布 https devblogs microsoft com dotnet welcome to c 9 0 几天前 一项新的语言功能是 目标类型的新表达式 它的用法与var 比较以下声明 我很好奇哪个性能更高 如果有
  • Rails 复制了资源中的参数

    我正在使用 Angular 资源 但我不明白为什么 Rails 会重复参数并将其放在资源名称中 我只需要了解为什么会发生这种情况 post data title asdsad rails parameters Parameters titl
  • 如何在 nginx.conf 中引用操作系统环境变量

    在 nginx conf 中 设置变量后set name value 我可以像这样参考它 name 但是当我导出操作系统环境变量时 经过env name from env like https nginx org en docs ngx c
  • 如何查找数字的二进制表示形式中 1 的个数?

    从其他搜索中 我发现这个问题被称为 汉明权重 或 人口计数 这么多的统计数据已经给出了很多答案吗 我需要以简单的方式找到解决方案吗 复杂性并不是什么大问题 JavaScript 中是否有像 Java 的 Integer bitCount 这
  • 如何通过对 R 中的变量进行分组来为折线图着色?

    我制作了一个线图 看起来像这样 我有 50 个国家及其过去 10 年 GDP 的数据集 样本数据 Country variable value China Y2007 3 55218e 12 USA Y2007 1 45000e 13 Ja
  • Flask 中的动态导航

    我有一个在 Flask 中工作的非常简单的网站 它全部由 sqlite 数据库提供支持 每个页面都作为页表中的一行存储 其中包含路径 标题 内容等内容 该结构是分层的 其中页面可以有父级 例如 虽然 关于 可能是一个页面 但也可能有 关于
  • 如何比较嵌套数组中的父记录和子记录?

    我在层次结构中有如下所示的节点 Node 1 Node 1 1 Node 1 1 1 现在我想检查父节点和子节点之间的连接是否定义 父级和子级之间的连接定义如下 例如 Node 1 和 Node 1 1 之间 connections joi
  • 获取 Facebook 帖子的所有分享列表

    我可以使用 facebook sdk 获得评论和点赞列表 但我不能 找到一种方法来获取共享帖子的所有用户的列表 我也尝试了 fql 这是我用来获得喜欢的代码 facebook new Facebook config likes facebo
  • 验证错误模板-绑定异常

    我正在使用以下模板验证错误
  • g++ 包括 boost 库

    我用 bjam 构建了我的 boost 库 然后移动了所有 a文件到c Server libs boost 1 46 0 lib 如果我想编译我的程序 则会出现一些错误 编译命令 g Ic Server libs boost 1 46 0
  • STL:为向量编写“where”运算符

    我需要根据几个布尔谓词找到向量中的索引 ex vector