在使用 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返回的是最后一个符合要求的下一位。