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

时间:2011-06-13 21:13:53

标签: c++

我认为我在这里缺乏对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")。

任何想法我做错了什么?我的意思是复制功能还是什么?

谢谢你:)。

4 个答案:

答案 0 :(得分:2)

您必须使用merge代替set_unionset_union将删除类似的条目。

请参阅mergeset_union引用。

答案 1 :(得分:2)

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

听起来你想要std::merge

答案 2 :(得分:1)

如果我很好地记住了我的集合理论,那就是两组的结合。所以这是预期的行为。

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

答案 3 :(得分:0)

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