字符串向量未使用 set_union 正确分配
string vector not getting properly assigned using set_union
我想我在这里缺乏对 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"
(。
知道我做错了什么吗? 我的意思是复制功能还是什么?
谢谢:)。
你必须使用 merge
而不是 set_union
。 set_union
将消除类似的进入。
请参阅合并和set_union引用。
我想你误解了set_union
应该做什么。
听起来你想要std::merge
。
如果我记得很清楚我的集合论,那就是两个集合的并集。所以这是预期的行为。
原因是集合不能有重复的元素。由于两个集合的并集也会产生一个有效的集合,因此它将只有一个"a"
值。
这是期望的行为,因为数学集合不包含重复项。当你调用set_union时,它应该删除重复的元素(在本例中是"a"的两个情况(。在两个包含(分别(("a","b"(和("a","c"(的向量上尝试。你应该得到一个只有"a"的向量。
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- C++Union/Struct位域的实现和可移植性
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 我可以重新分配/覆盖std::字符串吗
- 在c++中使用动态分配的问题
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 为什么我可以使用比分配的内存更多的内存