读书人

STL的merge功能如何用,要删除重复的数

发布时间: 2012-10-13 11:38:17 作者: rapoo

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;}
程序在merge函数里报错了,我想先排序一下vector,再合并两个vector,去除重复的数据

[解决办法]
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算法

里面有很多例子

读书人网 >C++

热点推荐