在C++中执行C#LINQ Where/Select的正确方法是什么
What is the proper way to do a C# LINQ Where/Select in C++?
在C#中,如果我有一个对象列表(例如List-myObjectList),我可以通过获得该列表的子集
anotherMyObjectList = myObjectList.Where(x => x.isSomething()).Select(x => x).ToList();
假设我不想使用第三方C++LINQ库(只有标准库,可能还有boost),那么在C++中最好的方法是什么?为我想执行此操作的每个实例编写一个函数是很容易的,但最好知道存在什么框架来执行这种类型的操作。
如果C++98、C++0x或C++11中的答案不同,那么最好知道它们之间的差异。
在C++11中,使用boost可以执行以下操作:
// assumming myObjectList is a vector of someObj type
std::vector<someObj> myObjectList = { ... };
auto result = myObjectList | boost::adaptors::filtered([](const someObj& x) { return x.isSomething(); });
std::vector<someObj> anotherMyObjectList(boost::begin(result), boost::end(result));
您可以使用"ccplinq":
using namespace cpplinq;
int ints[] = {3,1,4,1,5,9,2,6,5,4};
auto result = from_array (ints)
>> where ([](int i) {return i/2 == 0;})
>> select ([](int i) {std::stringstream s; s << i; return s.str();})
>> to_list ();
您可以使用std::copy_if()
创建容器的子集:
#include <algorithm>
#include <iterator>
#include <list>
std::list<object> myObjectList, anotherMyObjectList;
// fill myObjectList somehow
std::copy_if(cbegin(myObjectList),
cend(myObjectList),
std::back_inserter(anotherMyObjectList),
[](const object& o) { return o.IsSomething(); });
或者如果您使用的是C++98/03:
#include <algorithm>
#include <iterator>
#include <list>
std::list<object> myObjectList, anotherMyObjectList;
// fill myObjectList somehow
struct is_something {
bool operator()(const object&) {
return object.IsSomething();
}
};
std::copy_if(myObjectList.cbegin()
myObjectList.cend(),
std::back_inserter(anotherMyObjectList),
is_something());
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 通过JNI传递数据数组的最快方法是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在C++中包含原型文件的正确方法是什么?
- 在 OpenCV C++ 中估计基本矩阵之前对相应点进行归一化的正确方法是什么?
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 将一系列整数放入类的最佳方法是什么?
- 从长整整转换为uint64_t的推荐方法是什么?
- 将此布尔值传递给此函数的最有效方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?