STL的merge功能怎么用,要删除重复的数据
- C/C++ code
#include <iostream>#include <limits>#include <assert.h>#include <vector>#include <algorithm>#include <functional> // For greater<int>( )using namespace std;int _tmain(int argc, _TCHAR* argv[]){ std::vector<int> vRqt; std::vector<int> vRsp; std::vector<int> vAll; vRqt.push_back(11); vRqt.push_back(2); vRqt.push_back(3); vRqt.push_back(22); sort(vRqt.begin(),vRqt.end()); vRsp.push_back(31); vRsp.push_back(1); vRsp.push_back(4); vRsp.push_back(11); vRsp.push_back(3); sort(vRsp.begin(),vRsp.end()); merge(vRqt.begin(),vRqt.end(), vRsp.begin(),vRsp.end(), vAll.begin(), greater <int> ( ) ); return 0;}[解决办法]
- C/C++ code
#include <iostream>#include <limits>#include <assert.h>#include <vector>#include <algorithm>#include <functional> // For greater<int>( )using namespace std;int _tmain(int argc, _TCHAR* argv[]){ std::vector<int> vRqt; std::vector<int> vRsp; std::vector<int> vAll(20); vRqt.push_back(11); vRqt.push_back(2); vRqt.push_back(3); vRqt.push_back(22); sort(vRqt.begin(),vRqt.end()); vRsp.push_back(31); vRsp.push_back(1); vRsp.push_back(4); vRsp.push_back(11); vRsp.push_back(3); sort(vRsp.begin(),vRsp.end()); merge(vRqt.begin(),vRqt.end(), vRsp.begin(),vRsp.end(), vAll.begin(), greater <int> ( ) ); return 0;}
[解决办法]
vAll需要resize一下。
[解决办法]
- C/C++ code
// merge algorithm example#include <iostream>#include <algorithm>#include <vector>using namespace std;int main () { int first[] = {5,10,15,20,25}; int second[] = {50,40,30,20,10}; vector<int> v(10); vector<int>::iterator it; sort (first,first+5); sort (second,second+5); merge (first,first+5,second,second+5,v.begin()); cout << "The resulting vector contains:"; for (it=v.begin(); it!=v.end(); ++it) cout << " " << *it; cout << endl; return 0;}
[解决办法]
merge 的排序函数要和 sort 一样。
向后插入用 back_inserter,不要直接用 begin 或者 end。
merge 不会清理重复元素,清理重复元素用 set_union。
[解决办法]
- C/C++ code
#include <iostream>#include <limits>#include <assert.h>#include <vector>#include <algorithm>#include <functional> // For greater<int>( )using namespace std;int main(int argc, char* argv[]){ std::vector<int> vRqt; std::vector<int> vRsp; std::vector<int> vAll; vRqt.push_back(11); vRqt.push_back(2); vRqt.push_back(3); vRqt.push_back(22); sort(vRqt.begin(),vRqt.end()); vRsp.push_back(31); vRsp.push_back(1); vRsp.push_back(4); vRsp.push_back(11); vRsp.push_back(3); sort(vRsp.begin(),vRsp.end()); set_union(vRqt.begin(), vRqt.end(), vRsp.begin(), vRsp.end(), back_inserter(vAll)); return 0;}
[解决办法]
既然有 greater <int> ( )那么 遇到相等的你让人家怎么判断
[解决办法]
- C/C++ code
#include <iostream>#include <limits>#include <assert.h>#include <vector>#include <algorithm>#include <functional> // For greater<int>( )using namespace std;int main(){ std::vector<int> vRqt; std::vector<int> vRsp; std::vector<int> vAll; vRqt.push_back(11); vRqt.push_back(2); vRqt.push_back(3); vRqt.push_back(22); sort(vRqt.begin(),vRqt.end(), greater<int>() ); copy(vRqt.begin(), vRqt.end(), ostream_iterator<int>( cout, " ") ); cout << endl; vRsp.push_back(31); vRsp.push_back(1); vRsp.push_back(4); vRsp.push_back(11); vRsp.push_back(3); sort(vRsp.begin(),vRsp.end(), greater<int>() ); copy(vRsp.begin(), vRsp.end(), ostream_iterator<int>( cout, " ") ); cout << endl; vAll.resize(7); merge(vRqt.begin(),vRqt.end(), vRsp.begin(),vRsp.end(), vAll.begin(), greater<int>() ); copy(vAll.begin(), vAll.end(), ostream_iterator<int>( cout, " ") ); cout << endl; system("PAUSE"); return 0;}
[解决办法]
没有问题的代码
- C/C++ code
#include <iostream>#include <limits>#include <assert.h>#include <vector>#include <algorithm>#include <functional> // For greater<int>( )using namespace std;int _tmain(int argc, _TCHAR* argv[]){ std::vector<int> vRqt; std::vector<int> vRsp; std::vector<int> vAll; //vAll.reserve(100); vRqt.push_back(11); vRqt.push_back(2); vRqt.push_back(3); vRqt.push_back(22); sort(vRqt.begin(),vRqt.end()); vRsp.push_back(31); vRsp.push_back(1); vRsp.push_back(4); vRsp.push_back(11); vRsp.push_back(3); sort(vRsp.begin(),vRsp.end()); merge(vRqt.begin(),vRqt.end(), vRsp.begin(),vRsp.end(), back_inserter(vAll)); //合并 sort(vAll.begin(),vAll.end());//排序 vAll.erase( unique( vAll.begin(), vAll.end() ), vAll.end());//擦出 copy(vAll.begin(),vAll.end(),ostream_iterator<int>(cout," "));//显示 return 0;}
[解决办法]
参考:
STL算法
里面有很多例子