字符串向量未使用 set_union 正确分配

string vector not getting properly assigned using set_union

本文关键字:分配 union 向量 未使用 set 字符串      更新时间:2023-10-16

我想我在这里缺乏对 C/C++ 赋值的一些基本理解! 我有一个函数来计算两个字符串向量之间的集合联合。 我这样做的原因是算法库的函数set_union要求首先对两个向量进行排序,如果我按照以下方式进行排序,那么我不能忘记排序:

vector<string> SetOperations::my_set_union(vector<string> set1,
                                            vector<string> set2) {
    sort(set1.begin(), set1.end());
    sort(set2.begin(), set2.end());
    vector<string> v;
    set_union(set1.begin(), set1.end(), set2.begin(), set2.end(), back_inserter(v));
    return v;
}

然后,我执行以下操作:

vector<string> vec = set_ops.my_set_union(vec1, vec2);

其中vec1vec2是包含单个"a"的字符串向量,每个"a" set_ops是我在其中具有这些集合操作的类的实例化(如上面的一个(。 它们肯定都有这些元素 - 我已经打印了两个向量。

出于某种(简单?(原因,vec最终具有单个"a"元素而不是两个元素("a""a"(。

知道我做错了什么吗? 我的意思是复制功能还是什么?

谢谢:)。

你必须使用 merge 而不是 set_unionset_union将消除类似的进入。

请参阅合并和set_union引用。

我想你误解了set_union应该做什么。

听起来你想要std::merge

如果我记得很清楚我的集合论,那就是两个集合的并集。所以这是预期的行为。

原因是集合不能有重复的元素。由于两个集合的并集也会产生一个有效的集合,因此它将只有一个"a"值。

这是期望的行为,因为数学集合不包含重复项。当你调用set_union时,它应该删除重复的元素(在本例中是"a"的两个情况(。在两个包含(分别(("a","b"(和("a","c"(的向量上尝试。你应该得到一个只有"a"的向量。