根据另一个向量中的元素过滤/复制一个向量

Ela782

我有一个某种类型的元素(带有一个name成员)的向量,我想过滤(或复制)此向量,以便它仅包含名称与某些名称列表匹配的元素。基本上就是这样:“如果元素的名称等于”中的任何名称,则复制该元素vector<string> filter

我一直在尝试使用std::copy_if和进行操作std::any_of,导致产生如下所示的代码,但由于any_of无法以这种方式应用,所以我一次使其无法正常工作,而且我不确定其中使用的是正确的工具。这个案例。

using namespace std;

template<class T>
struct MyType {
  string name;
  T data;
};

template<class T>
vector<MyType<T>> filter(vector<MyType<T>> items, vector<string> filter)
{
  vector<MyType<T>> filteredItems;
  copy_if(begin(items), end(items), begin(filteredItems), any_of(begin(filter), end(filter), [](const MyType<T>& lhs, const MyType<T>& rhs) {return lhs.name == rhs.name; }));
  return filteredItems;
};

int main() {
  vector<MyType<int>> items { {"a", 1}, {"b", 2}, {"c", 3} };
  vector<string> filter { "a", "c" };
  auto filteredItems = filter(items, filter);
}

我如何才能做到这一点,最好是具有std::功能性?(欢迎使用C ++ 11/14)

如果您想在ideone上面的代码。

我想这可能是使用范围的一个很好的例子,但是我的代码需要在VS 2013上编译,所以我不能使用https://github.com/ericniebler/range-v3,我有点犹豫使用较旧的范围库,但我可以说服其他人。

TC

copy_if是正确的选择,但您的谓词是错误的,因此您需要使用back_inserter

copy_if(begin(items), end(items), back_inserter(filteredItems), 
       [&](const MyType<T> & item) { return std::find(begin(filter), end(filter), item.name) != end(filter);} );

要查找某个范围内的内容,请使用std::find,它会执行简单的线性搜索。如果filter排序,std::binary_search也可以使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将一个向量的元素复制到另一个向量

迭代一个向量并根据元素创建另一个向量

根据R中另一个向量中定义的数字位置查找向量的元素

将向量的向量元素复制到另一个向量

根据另一个向量的值创建向量

一个人如何在不复制的情况下将过滤一个向量的结果存储在另一个向量中

推力访问向量元素的另一个向量

向量元素是另一个向量Matlab的索引

如何从另一个向量的另一个第一个元素减去向量中的第一个元素?

根据另一个数据帧的向量中的信息提取列表元素

仅将向量中的字母复制到C ++中的另一个向量

以相反的顺序将一个向量复制到另一个向量

r:根据另一个向量中的双重出现随机分配一个向量中的“1”或“2”

如何创建一个向量来指示一个向量的元素与另一个向量中的任何元素之间的匹配?

如何根据另一个向量中给定的索引分割向量?

使用 STL 算法根据存储在另一个向量中的权重对向量进行排序

从向量中删除元素(如果它们也在另一个向量中)

计算向量中的值少于另一个向量中的每个元素

根据另一个向量中的数据块分配一个二进制向量

根据另一个分区分割向量

如果元素在 R 中是非 NA,则通过另一个向量条件更新向量

如何删除 Rust 中另一个向量中出现的向量元素?

在向量中找到小于R中另一个向量的值的最大元素

计算向量中元素在另一个向量中的出现

Clojure:如何在另一个向量中获取向量的元素

来自一个向量的元素在具有R的另一个向量中的位置

在MATLAB中找到一个向量中元素在另一个向量中的位置

创建一个递增的向量,但考虑另一个向量中相等元素的出现次数

如何从另一个相同的向量中替换一个元素,但另一个向量不会改变?