我认为我在这里缺乏对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);
其中vec1
和vec2
是包含单个"a"
和"a"
的字符串向量,set_ops
是我有这些集合的类的实例化操作(如上所述)。他们都肯定有这些元素 - 我已经打印出两个向量。
对于某些(简单?)原因,vec
最终只有"a"
的单个元素而不是两个元素("a"
和"a"
)。
任何想法我做错了什么?我的意思是复制功能还是什么?
谢谢你:)。
答案 0 :(得分:2)
答案 1 :(得分:2)
我认为你误解了set_union
应该做什么。
听起来你想要std::merge
。
答案 2 :(得分:1)
如果我很好地记住了我的集合理论,那就是两组的结合。所以这是预期的行为。
原因是一个集合不能有重复的元素。由于两个集合的并集也会产生有效集合,因此它只有一个"a"
值。
答案 3 :(得分:0)
这是期望的行为,因为数学集不包含重复项。当你调用set_union时,它应该删除重复的元素(在这种情况下你的两个“a”的情况)。在两个包含(“a”,“b”)和(“a”,“c”)的向量上尝试。你应该得到一个只有“a”的矢量。