在具有类似 lambda 语法的结构列表中搜索 C++
Searching in a list of structs with lambda-like syntax in C++
struct Data
{
int Id;
std::vector<int> SomeData
}
std::vector<Data> dataList = ....
int wantedIndex = 11;
std::find(dataList.begin(), dataList.end(), "where dataList.Id == wantedIndex")
在 Visual Studio 2008 中,这种语法在标准C++中是否可行?
如果您不能使用 C++11。也许你可以使用增强凤凰。
它会是这样的:
#include <boostphoenixphoenix.hpp>
...
std::find_if(dataList.begin(), dataList.end(),
boost::phoenix::bind(&Data::Id, boost::phoenix::placeholders::arg1) == boost::phoenix::val(wantedIndex)));
虽然我认为在您非常简单的情况下,来自 boost 的绑定也可以做到这一点。
std::find_if(dataList.begin(), dataList.end(), boost::bind(&Data::Id, _1) == wantedIndex);
C++11 附带对 lambda 的支持:
std::find_if(dataList.begin(), dataList.end(),
[&wantedIndex](const Data& x) { return x.Id == wantedIndex;});
好吧,
如果你有Visual Studio 2008,那么你不能使用lambda函数,我想正确的做法如下:
int wanted_index = 11;
struct Data
{
int Id;
std::vector<int> SomeData
}
bool find_fun(int i)
{
return i == wanted_index;
}
//std::vector<Data> dataList = ....
std::find(dataList.begin(), dataList.end(), find_fun);
您还可以使用 boost bind 或 std::tr1 bind 来拥有类似语法的 lambda 函数。从 msdn visual studio 2008 文档中可以看出,您也可以使用 std::bind((请参阅: http://msdn.microsoft.com/en-us/library/bb982702(v=vs.90(.aspx
所以你可以使用:
bool find_fun1(int i, int wanted_index)
{
return i == wanted_index
}
int wanted_index = 11;
std::find_if(dataList.begin(), dataList.end(), std::bind(find_fun1,_1,wanted_index));
相关文章:
- 没有为自己的结构调用列表推回方法
- 访问类lintalizer列表中的结构元素
- 将大括号括起来的初始值设定项列表作为结构返回
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- C++-将具有引用的长参数列表重构为结构
- 在C++中循环访问自定义结构列表的小问题
- 访问列表向量中的结构
- c ++数据输入并读回列表中的结构结构中的数组
- 如何在结构初始值设定项列表中实例化类
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 使用列表进行动态结构分配
- 如何从结构列表中筛选信息
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- 用于筛子的最佳数据结构是什么(即一些被划掉的数字列表)?
- C/C++intellisense 0.26.1不显示结构成员列表
- C++使用旧编译器GCC 4.4.0在结构列表中查找字符串
- 列表结构和数组的奇怪问题
- 释放包含STL类的链接列表结构的内存
- c++游戏的列表结构