是否有std::vector的后代可以合并和排序?
Are there descendants of std::vector who can merge and sort?
我正在使用std::vectors的图形程序。这些向量包含屏幕上的位置,并且它们是排序的。现在我想把它们合并在一起,保持实际的排序,同时删除可能的重复,像这样:
vector1 : [2, 6, 10]
vector2 : [1, 5, 6, 10]
result : [1, 2, 5, 6, 10]
为了更好的理解:我已经自己编程了函数来做实际的合并,基于基本的std::向量函数,如at()
, insert()
, size()
,但我的函数似乎是一个性能差距(O(n2),我相信)。
我正在寻找其他std类(如果可能的话,为了方便编程,std::vector后代),它们包含merge()
和sort(kind="unique")
作为基本方法。
有人知道STL中是否存在这样的类吗?
STL有分离容器和算法的概念,所以虽然std::vector
确实没有成员来排序或合并它,但STL通过处理迭代器的非成员函数模板提供了所有所需的算法。
。要对向量进行排序,可以调用
std::sort(vector1.begin(),vector1.end());
检查算法头供进一步参考,即std::sort
和std::merge
。
要合并和删除重复项,您可以使用std::set_union
,这可能是您最好的选择。下面是工作代码示例。
这是一个关于迭代器的教程,不过对于这个特定的任务,您只需要不言自明的vector::begin()
和vector::end()
。
要从单个容器中删除重复项,通常使用std::unique()
或std::unique_copy()
,如@unwind所提到的。
关于std::unique()
和其他"删除"算法(如std::remove()
)有一个警告,它源于我提到的"容器和算法的分离":算法没有办法实际地从容器中删除元素——它被赋予了一个迭代器或一个范围,但它不知道容器的实际类型和实现。
std::unique()
:
vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
std::unique_copy
不需要这个技巧,但它会复制整个向量,所以只有当你打算复制它时才有意义。
- 使用C++程序合并排序没有得到正确的输出
- 用于合并排序的合并函数
- 合并排序不排序自创建数组类 c++
- 仅在大型阵列上出现合并排序分段错误
- C++合并排序可视化工具
- 没有输出的合并排序我做错了什么?
- 字符串上的合并排序上的 Seg 错误
- 使用向量在 c++ 中合并排序实现
- 我无法让我的合并排序实现运行
- 合并排序:分段错误核心转储
- 合并排序中的错误计数:计数反转
- C++ 多线程 - 与线程合并排序的算法替代
- C++中合并排序算法的奇怪行为
- 合并排序没有给我任何输出
- C++ 中的合并排序
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 在实现合并排序代码时无法计算所有反转
- 在C++中使用迭代器合并排序
- 运行合并排序递归算法时EXC_BAD_ACCESS错误
- 我的C++合并排序代码不起作用。我在这里错过了什么?