需要帮助从结构向量中搜索元素
need help to search element from vector of struct
我有 struct partationPartItemTag_t
类型的向量
typedef struct partationPartItemTag
{
std::string partition;
std::string partGroupId;
std::string mathTuid;
std::string partNumber;
tag_t itemTag;
}partationPartItemTag_t;
我想从具有 partition == 'a'
和 partGroupId == 'b'
值的向量中查找元素
我已经编写了以下代码并且它在 C++11 上运行良好
但是现在我想修改这段代码,因为我不支持 c++11
partationPartItemTag_t mi={'a', 'b'};
vector<partationPartItemTag_t> searchlist;
searchlist.push_back(mi);
vector<partationPartItemTag_t>::iterator flag = std::search(partationPartItemTagVec.begin(),partationPartItemTagVec.end(),searchlist.begin(),searchlist.end(),[](partationPartItemTag_t &x, partationPartItemTag_t &y){
return ((x.partition.compare(y.partition) == 0) && (x.partGroupId.compare(y.partGroupId) == 0));
});
请帮我修改这段代码我看到了几个函数指针的帖子但是我无法使用函数指针转换它
注意:我想检查结构中 2 个成员的值,我不能使用 lambda 函数或 c++11
提前致谢。
如果您需要从 C++11 转换为 C++098,更好的选择是用函子替换 lambda。
如下定义一个函子 compare
并在您的算法中调用它来代替 lambda。
struct compare
{
bool operator(partationPartItemTag_t x, partationPartItemTag_t y) const
{
return ((x.partition.compare(y.partition) == 0) &&
(x.partGroupId.compare(y.partGroupId) == 0) );
}
}
std::search(partationPartItemTagVec.begin(),
partationPartItemTagVec.end(),
searchlist.begin(),searchlist.end(),
compare(partationPartItemTag_t &x, partationPartItemTag_t &y) );
lambda 只是一个方便的仿函数,它的引入是为了让您可以更简单地编写这些算法。
但这只是一种方便。如果您不能在这种情况下使用它们,那还不是世界末日。毕竟,我们不能很多年了。解决方案是回到使用仿函数:
struct SearchFor
{
/* ctor omitted for brevity */
std::string partition, partGroupId;
bool operator()(const partationPartItemTag_t& elem) const
{
return elem.partition == partition &&
elem.partGroupId == partGroupId;
}
};
然后在线使用它:
vector<partationPartItemTag_t>::iterator flag =
std::find_if(partationPartItemTagVec.begin(),
partationPartItemTagVec.end(),
SearchFor("a", "b"));
我有 struct partationPartItemTag_t
类型的向量
typedef struct partationPartItemTag
{
std::string partition;
std::string partGroupId;
std::string mathTuid;
std::string partNumber;
tag_t itemTag;
}partationPartItemTag_t;
我想从具有 partition == 'a'
和 partGroupId == 'b'
我已经编写了以下代码并且它在 C++11 上运行良好 但是现在我想修改这段代码,因为我不支持 c++11
partationPartItemTag_t mi={'a', 'b'};
vector<partationPartItemTag_t> searchlist;
searchlist.push_back(mi);
vector<partationPartItemTag_t>::iterator flag = std::search(partationPartItemTagVec.begin(),partationPartItemTagVec.end(),searchlist.begin(),searchlist.end(),[](partationPartItemTag_t &x, partationPartItemTag_t &y){
return ((x.partition.compare(y.partition) == 0) && (x.partGroupId.compare(y.partGroupId) == 0));
});
请帮我修改这段代码我看到了几个函数指针的帖子但是我无法使用函数指针转换它 注意:我想检查结构中 2 个成员的值,我不能使用 lambda 函数或 c++11
提前致谢。
如果您需要从 C++11 转换为 C++098,更好的选择是用函子替换 lambda。
如下定义一个函子 compare
并在您的算法中调用它来代替 lambda。
struct compare
{
bool operator(partationPartItemTag_t x, partationPartItemTag_t y) const
{
return ((x.partition.compare(y.partition) == 0) &&
(x.partGroupId.compare(y.partGroupId) == 0) );
}
}
std::search(partationPartItemTagVec.begin(),
partationPartItemTagVec.end(),
searchlist.begin(),searchlist.end(),
compare(partationPartItemTag_t &x, partationPartItemTag_t &y) );
lambda 只是一个方便的仿函数,它的引入是为了让您可以更简单地编写这些算法。
但这只是一种方便。如果您不能在这种情况下使用它们,那还不是世界末日。毕竟,我们不能很多年了。解决方案是回到使用仿函数:
struct SearchFor
{
/* ctor omitted for brevity */
std::string partition, partGroupId;
bool operator()(const partationPartItemTag_t& elem) const
{
return elem.partition == partition &&
elem.partGroupId == partGroupId;
}
};
然后在线使用它:
vector<partationPartItemTag_t>::iterator flag =
std::find_if(partationPartItemTagVec.begin(),
partationPartItemTagVec.end(),
SearchFor("a", "b"));