需要帮助从结构的矢量搜索元素

时间:2015-06-18 11:49:11

标签: c++ function c++11 std

我有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

提前致谢。

2 个答案:

答案 0 :(得分:0)

如果你需要从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) );

答案 1 :(得分:0)

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"));