首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在一个类方法中,两个`unordered_set`s在C++中的交集“不工作”,但与`set`一起工作?

在C++中,unordered_set是一种无序的容器,它使用哈希表实现,而set是一种有序的容器,它使用红黑树实现。由于它们底层的实现方式不同,导致在进行交集操作时表现不同。

当我们尝试在一个类方法中计算两个unordered_set的交集时,可能会遇到问题。这是因为unordered_set是无序的,它不会对元素进行排序,而是根据哈希值进行存储和访问。因此,交集操作可能会导致元素的顺序发生变化,从而导致结果不符合预期。

相反,set是有序的,它会对元素进行排序并保持有序状态。因此,在类方法中使用set计算交集时,可以得到正确的结果。

为了解决这个问题,我们可以使用set来代替unordered_set进行交集操作。或者,我们可以将unordered_set中的元素复制到一个vector中,然后对vector进行排序,最后使用set_intersection算法来计算交集。

下面是一个示例代码:

代码语言:txt
复制
#include <iostream>
#include <unordered_set>
#include <set>
#include <algorithm>
#include <vector>

class MyClass {
public:
    void intersection() {
        std::unordered_set<int> set1 = {1, 2, 3, 4, 5};
        std::unordered_set<int> set2 = {4, 5, 6, 7, 8};

        // 使用set代替unordered_set进行交集操作
        std::set<int> intersectionSet;
        for (const auto& element : set1) {
            if (set2.count(element) > 0) {
                intersectionSet.insert(element);
            }
        }

        // 输出交集结果
        for (const auto& element : intersectionSet) {
            std::cout << element << " ";
        }
        std::cout << std::endl;
    }

    void intersectionWithSorting() {
        std::unordered_set<int> set1 = {1, 2, 3, 4, 5};
        std::unordered_set<int> set2 = {4, 5, 6, 7, 8};

        // 将unordered_set中的元素复制到vector中
        std::vector<int> vector1(set1.begin(), set1.end());
        std::vector<int> vector2(set2.begin(), set2.end());

        // 对vector进行排序
        std::sort(vector1.begin(), vector1.end());
        std::sort(vector2.begin(), vector2.end());

        // 使用set_intersection计算交集
        std::vector<int> intersectionVector;
        std::set_intersection(vector1.begin(), vector1.end(), vector2.begin(), vector2.end(), std::back_inserter(intersectionVector));

        // 输出交集结果
        for (const auto& element : intersectionVector) {
            std::cout << element << " ";
        }
        std::cout << std::endl;
    }
};

int main() {
    MyClass obj;
    obj.intersection();
    obj.intersectionWithSorting();

    return 0;
}

在上述示例代码中,intersection方法使用set代替unordered_set进行交集操作,而intersectionWithSorting方法则使用排序后的vectorset_intersection算法来计算交集。这样可以确保得到正确的交集结果。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券