鱼C论坛

 找回密码
 立即注册
查看: 2558|回复: 4

关于集合问题

[复制链接]
发表于 2019-12-20 22:22:55 | 显示全部楼层 |阅读模式
5鱼币
例如  集合a  集合 b  求b在a中的余集
集合a   1 2 3 4 5 6
集合b    2 4 5 6 7 8
输出   1 3

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-21 14:36:21 | 显示全部楼层
#include <iostream>
#include <vector>

const std::vector<int> complement(const std::vector<int> &a, const std::vector<int> &b)
{
        std::vector<int> res;
        for(const auto i: a)
        {
                bool flag = true;
                for(const auto j: b)
                {
                        if(i == j)
                        {
                                flag = false;
                                break;
                        }

                }
                if(flag)
                        res.push_back(i);
        }
        return res;
}

std::ostream &operator<<(std::ostream &os, const std::vector<int> &data)
{
        for(const auto i: data)
        {
                std::cout << i << " ";
        }
        return os;
}

int main()
{
        std::vector<int> a = {1, 2, 3, 4, 5, 6};
        std::vector<int> b = {2, 4, 5, 6, 7, 8};
        std::cout << complement(a, b) << std::endl;
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-21 15:33:17 | 显示全部楼层
a = [1,2,3,4,5,6]
b = [2,4,5,6,7,8]
for i in a:
        if i not in b:
                print(i,end=" ")
楼上写的太高深看不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-21 16:01:44 | 显示全部楼层
荣耀 发表于 2019-12-21 15:33
a = [1,2,3,4,5,6]
b = [2,4,5,6,7,8]
for i in a:

这里是C/C++,不是py
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-21 16:21:45 | 显示全部楼层
提供一个排序之后的算法,效率要高一些:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

template <typename T>
vector<T> operator-(vector<T> a, vector<T> b) {
        sort(a.begin(), a.end());
        sort(b.begin(), b.end());
        vector<T> ret;
        for (auto p = a.begin(), q = b.begin(); p != a.end(); ++p) {
                while (q != b.end() && *p > *q) {
                        q++;
                }
                if (q != b.end() && *p == *q) {
                        continue;
                }
                ret.push_back(*p);
        }
        return ret;
}

template <typename T>
ostream& operator<<(ostream& os, vector<T> v) {
        os << "{ ";
        bool b = false;
        for (const T& t : v) {
                if (b) {
                        os << " , ";
                }
                os << t;
                b = true;
        }
        os << " }";
        return os;
}
int main() {
        vector<int> a = { 1,2,3,4,5,6 };
        vector<int> b = { 2,4,5,6,7,8 };
        vector<int> c = a - b;
        cout << c << endl;
        system("pause");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表