zoukankan      html  css  js  c++  java
  • 使用STL实现集合的交并差操作

      

    集合运算的前提是两个集合必须按照同样的规则排序就绪
    vector是无序集合,参与运算前必须首先排序;map,set是有序

    核心函数是

    set_intersection()

    set_union()

    set_difference()

    使用的话看代码吧,下面的代码是个人认为比较透彻比较灵活的版本,在codeblocks运行正常。

    更改只需要改参与运算的集合名称

    题目链接:https://acm.ecnu.edu.cn/problem/2853/

      1 /**
      2 
      3 author: gudy
      4 
      5 v.1
      6 
      7 使用STl的set_intersection set_union set_difference函数实现交集并集差集
      8 
      9 版本1与0区别在于读入集合时是直接使用set,0经过vector到set的转换,效率要低一点
     10 
     11 */
     12 #include<bits/stdc++.h>
     13 using namespace std;
     14 int main(){
     15     int lenA,lenB;
     16     cin >> lenA >> lenB;
     17     //cout << "ok0" << lenA << lenB << endl;
     18     set<int> s_a,s_b;
     19     string line,word;
     20     //这个get为了吃第一行的换行
     21     cin.get();
     22     //读取一行
     23     getline(cin ,line);
     24     istringstream record1(line);
     25     while(record1 >> word){
     26         s_a.insert(atoi(word.c_str()));
     27     }
     28     /*
     29     vector<int>::iterator it_a = a.begin();
     30     while(it_a != a.end()){
     31         cout << *it_a << " ";
     32         it_a++;
     33     }
     34     cout << "ok1" << endl;
     35     */
     36     //读取一行
     37     getline(cin ,line);
     38     istringstream record2(line);
     39     while(record2 >> word){
     40         s_b.insert(atoi(word.c_str()));
     41     }
     42     /*
     43     vector<int>::iterator it_b = b.begin();
     44     while(it_b != b.end()){
     45         cout << *it_b << " ";
     46         it_b++;
     47     }
     48     cout << "ok2" << endl;
     49     */
     50     //排序
     51     //集合运算的前提是两个集合必须按照同样的规则排序就绪
     52     //vector是无序集合,参与运算前必须首先排序.
     53     //使用vector可以保留个数信息,这儿不需要,选择原始集合的数据结构用set
     54     //sort(a.begin(),a.end());
     55     //sort(b.begin(),b.end());
     56 
     57 
     58     //
     59     vector<int> v_intersection;
     60     //调用核心函数
     61     set_intersection(s_a.begin(),s_a.end(),s_b.begin(),s_b.end(),insert_iterator<vector<int> >(v_intersection,v_intersection.begin()));
     62     cout << "{";
     63     //判断非空,如果为空,输出第一个数字时程序会直接崩溃
     64     if(v_intersection.size() != 0){
     65         vector<int>::iterator it_inter = v_intersection.begin();
     66         cout << *it_inter;
     67         it_inter++;
     68         while(it_inter != v_intersection.end()){
     69             cout << "," << *it_inter ;
     70             it_inter++;
     71         }
     72     }
     73     cout << "}" << endl;
     74 
     75     //
     76     vector<int> v_union;
     77     set_union(s_a.begin(),s_a.end(),s_b.begin(),s_b.end(),insert_iterator<vector<int> >(v_union,v_union.begin()));
     78 
     79     cout << "{";
     80     if(v_union.size() != 0){
     81         vector<int>::iterator it_union = v_union.begin();
     82         cout << *it_union;
     83         it_union++;
     84         while(it_union != v_union.end()){
     85             cout << "," << *it_union;
     86             it_union++;
     87         }
     88     }
     89     cout << "}" << endl;
     90 
     91     //
     92     vector<int> v_diff;
     93     set_difference(s_a.begin(),s_a.end(),s_b.begin(),s_b.end(),insert_iterator<vector<int> >(v_diff,v_diff.begin()));
     94     cout << "{";
     95     if(v_diff.size() != 0){
     96         vector<int>::iterator it_diff = v_diff.begin();
     97         cout << *it_diff;
     98         it_diff++;
     99         while(it_diff != v_diff.end()){
    100             cout << "," << *it_diff;
    101             it_diff++;
    102         }
    103     }
    104     cout << "}" << endl;
    105     return 0;
    106 }

     

  • 相关阅读:
    『高性能模型』轻量级网络ShuffleNet_v1及v2
    『计算机视觉』物体检测之RefineDet系列
    『计算机视觉』目标检测前沿及回顾(2018)
    『高性能模型』轻量级网络MobileNet_v2
    『流畅的Python』第14章:可迭代的对象、迭代器和生成器
    『流畅的Python』第12章:继承的优缺点
    『关键点检测』CPN:Cascaded Pyramid Network for Multi-Person Pose Estimation
    『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支
    『计算机视觉』Mask-RCNN_训练网络其三:训练Model
    『计算机视觉』mini深度学习框架实现
  • 原文地址:https://www.cnblogs.com/gudygudy/p/12916631.html
Copyright © 2011-2022 走看看