使用QT下的C++实现数据库中的并集操作

这篇博客介绍了如何在C++中实现两个包含学生信息的集合的并集操作。首先定义了学生结构体,然后提供了两种方法:一种是通过遍历比较插入,另一种是先合并后去重。去重采用了哈希表来提高效率,确保结果中没有重复的学号。
摘要由CSDN通过智能技术生成

问题:假设有集合a和b,a和b中分别有不同或者相同的数据,实现a和b的并集操作

首先要定义一个结构体,在这里是学生结构体包含学号,姓名,性别,其中假设学号具有唯一性。

有两种方法可以实现两个集合的并集,一种是将b集合的全部放到新的c集合中,然后从a集合的第一个元素开始遍历b集合,如果这个元素和b集合里所有元素都不一样,那么插入到c集合中。

第二种是将a和b两个集合全都放到c集合中,再对c集合进行遍历,找到重复的元素进行删除。

首先是两种方法都需要的准备工作,定义结构体和集合a,b,c,还有判断元组是否相同的方法。

struct student{
    QString name;
    int nubmer;
    QString sex;
};

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    QVector<student> s1;
    QVector<student> s2;
    bool same(student s1,student s2);
    QVector<student> bing(QVector<student> s1,QVector<student> s2);
    QVector<student> bing2(QVector<student> s1,QVector<student> s2);

};

这部分是在头文件里准备,集合a,b命名为s1,s2.下面是根据学号判断元组是否相同。

bool Widget::same(student s1, student s2)
{
    if(s1.nubmer == s2.nubmer){
        return true;
    }
    return false;
}

方法一的实现:

QVector<student> Widget::bing(QVector<student> s1, QVector<student> s2)
{
    QVector<student> s3;
    s3 = s2;
    for(int i=0;i<s1.length();i++){
        for(int j=0;j<s2.length();j++){
            if(same(s1[i],s2[j])){
                qDebug() << "xiangtong";
                break;
            }
            if(j == s1.length()-1){
                s3.push_back(s1[i]);
            }
        }
    }
    return s3;
}

方法二的实现:

QVector<student> Widget::bing2(QVector<student> s1, QVector<student> s2)
{
    QVector<student> s3;
    s3 = s1+s2;
    QHash<int,int> stu;
    for(int i=0;i<s3.length();i++){
        if(!stu.contains(s3[i].nubmer)){
            stu.insert(s3[i].nubmer,1);
        }
        else{
            s3.remove(i);

        }
    }
    return s3;


}

方法的判断相同的方法使用哈希表,如果一个元组已经在哈希表里存在了,说明重复,则删除这个元组。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值