C++集合运算函数总结-merge、set_union、set_difference、set_symmetric_difference、set_intersection

C++集合运算函数总结

集合A,B。(可以使用数组、list、vector)
头文件:#include<algorithm>
前提:两个集合已经有序。
merge() //归并两个序列,元素总个数不变,只是将两个有序序列归并为一个有序序列。
set_union() //实现求集合A,B的并。
set_difference()//实现求集合A,B的差(即A—B)
set_symmetric_difference()//实现求集合A,B的对称差(即(A-B)并(B-A))
set_intersection()//实现求集合A,B交集。
 
//集合运算
//熊八八
//2013-3-15
 
#include<iostream>
#include<stdio.h>
#include<list>
#include<algorithm>            //set_union求并集
using namespace std;
 
template<class T>
void Print(T List)
{
       class T::iterator iter;
       for(iter=List.begin(); iter!=List.end(); iter++)
              printf("%d ", *iter);
       printf("\n");
}
int main()
{
       list<int> List_A;
       list<int> List_B;
       int temp;
       printf("Enter 5 integers into List_A:\n");
       for(int i=0; i<5; i++)
       {
              scanf("%d", &temp);
              List_A.push_back(temp);
       }
       //printf("Enter some integers into List_B:\n");
       for(int i=0; i<5; i++)
       {
              scanf("%d", &temp);
              List_B.push_back(temp);
       }
      
       List_A.sort();
       List_B.sort();
      
       list<int> List_C(10);
       //不能将操作后的结果重新放入List_A或者List_B.如果非要如此,可以设一中间变量List_C,先将结果存储至List_C,然后List_A = List_C
       //merge(List_A.begin(), List_A.end(), List_B.begin(), List_B.end(), List_C.begin()); //合并
       //set_union(List_A.begin(), List_A.end(), List_B.begin(), List_B.end(), List_C.begin());//并集
       //set_difference(List_A.begin(), List_A.end(), List_B.begin(), List_B.end(), List_C.begin());//差集
       //set_symmetric_difference(List_A.begin(), List_A.end(), List_B.begin(), List_B.end(), List_C.begin());//对称差
       set_intersection(List_A.begin(), List_A.end(), List_B.begin(), List_B.end(), List_C.begin());//交集
      
       printf("List_A contains:\n");
       Print(List_A);
       printf("List_B contains:\n");
       Print(List_B);
       printf("List_C contains:\n");
       Print(List_C);
       system("pause");
       return 0;
}

 


set容器使用时这样比较常用吧

            set_intersection(x.begin(), x.end(), y.begin(), y.end(), inserter(z, z.end()));
            ....

spark + hive 自定义聚合函数回顾--group_concat实现 group_concat是一种常用的聚合函数,它可以将同一组内的多个值合并成一个字符串。在hive中,group_concat函数已经内置,但是在spark中需要自定义实现。 实现group_concat函数的步骤如下: 1. 继承org.apache.spark.sql.expressions.UserDefinedAggregateFunction类,实现其抽象方法。 2. 定义输入和输出的数据类型。 3. 实现update方法,用于更新聚合结果。 4. 实现merge方法,用于合并不同分区的聚合结果。 5. 实现evaluate方法,用于输出最终的聚合结果。 下面是一个简单的group_concat实现示例: import org.apache.spark.sql.expressions.{MutableAggregationBuffer, UserDefinedAggregateFunction} import org.apache.spark.sql.types.{DataType, StringType, StructType} import org.apache.spark.sql.{Row, SparkSession} class GroupConcat extends UserDefinedAggregateFunction { // 定义输入数据类型 def inputSchema: StructType = new StructType().add("value", StringType) // 定义中间缓存数据类型 def bufferSchema: StructType = new StructType().add("buffer", StringType) // 定义输出数据类型 def dataType: DataType = StringType // 定义是否是确定性的 def deterministic: Boolean = true // 初始化中间缓存数据 def initialize(buffer: MutableAggregationBuffer): Unit = { buffer.update(0, "") } // 更新中间缓存数据 def update(buffer: MutableAggregationBuffer, input: Row): Unit = { val str = input.getString(0) if (!buffer.isNullAt(0)) { buffer.update(0, buffer.getString(0) + "," + str) } else { buffer.update(0, str) } } // 合并不同分区的中间缓存数据 def merge(buffer1: MutableAggregationBuffer, buffer2: Row): Unit = { if (!buffer2.isNullAt(0)) { update(buffer1, buffer2) } } // 输出最终的聚合结果 def evaluate(buffer: Row): Any = { buffer.getString(0) } } // 使用示例 val spark = SparkSession.builder().appName("group_concat").master("local[*]").getOrCreate() spark.udf.register("group_concat", new GroupConcat) val df = spark.sql("select id, group_concat(name) as names from table group by id") df.show() 在使用时,需要先将自定义的聚合函数注册到spark中,然后就可以在sql中使用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值