C++ unique 里 类型为vector<vector<int>> 的比较函数

在使用 algorithm的unique 时剔除 vector<vector<int>里面重复的元素时把它想得太复杂了,记录一下

bool comp(vector<int> v1,vector<int> v2){
    for(unsigned i=0;i<v1.size();++i){
        if(v1[i]!=v2[i])return false;
    }
    return true;
}

int main(){

    vector<vector<int>> vvi{{3,5},
                            {3,5},
                            {2,3,5}};
    vector<vector<int>>::iterator it = unique(vvi.begin(),vvi.end(),comp);
    vvi.erase(it,vvi.end());
    return 0;
}

当把comp()放到一个class 里面时又出现了错误。。。

有两种办法

第一个将比较函数申明为static

    ...
     vector<vector<int>>::iterator it = unique(ret.begin(),ret.end(),&Solution::comp); ret.erase(it,ret.end()); return ret; } private: bool comp(vector<int> v1,vector<int> v2){ for(unsigned i=0;i<v1.size();++i){ if(v1[i]!=v2[i])return false; } return true; }

第二个使用lambda构造临时函数

        vector<vector<int>>::iterator it = unique(ret.begin(),ret.end(),[](vector<int> v1,vector<int> v2){
                for(unsigned i=0;i<v1.size();++i){
                    if(v1[i]!=v2[i])return false;
                }
                return true;
        });

 

这儿顺便记录一下unique返回的是最后一个符合要求的下一位。

posted @ 2020-04-23 16:15  狂澜688  阅读(478)  评论(0编辑  收藏  举报