如何将 std::vector 转换为 std::set 而不会丢失顺序
how to convert std::vector to std::set without losing the order
我使用以下代码进行转换:
std::set<ObjectType> s(v.begin(), v.end());
但是,我需要保持矢量元素的顺序。我该怎么做?
如果向量没有排序,则不能。 std::set
按升序或降序保存其内容。
如果向量是有序的,那么您只需要将std::set
的比较函数设置为用于对向量进行排序的任何函数。
您可能想看看:如何在使用算法保持原始顺序的同时从未排序的 std::vector 中删除重复项?
当
且仅当您的vector
按一些严格的弱排序排序时,例如按数字<
排序时,您才能这样做。在这种情况下,请为set
提供适当的比较对象(用于对vector
进行排序的对象),顺序将合适。
否则,如果您的vector
未按拟合标准排序,则无法使set
保持原始顺序,因为对元素进行排序是set
的不变量之一。
相关文章:
- 遍历顺序由 std::文件系统directory_iterator给出
- std::remove_reference_t<std::remove_cv_t<T>>顺序重要吗?
- 标记为 std::memory_order_seq_cst 的单个原子操作是否会在所有位置触发顺序一致性?
- std::bind() 参数列表中函子的执行顺序(可能与函数参数的求值顺序无关)
- 基于 std::vector <string>的内容动态设置顺序的模式
- std::unique_ptr析构函数顺序
- 如何实现对参数顺序不可知的std::same_as的广义形式(即对于两个以上的类型参数)
- 基于 C++ 范围的 std::vector 迭代的顺序
- GNUMakefile 和 gcc:解决冲突"-std=c++"需求的顺序
- 将字符指针按顺序存储在 map 中 std::map<char*, int> mymap。将其存储为字符或字符串不是一个选项
- std::apply是否为评估顺序提供保证
- 为什么具有顺序一致性的 std::原子存储使用 XCHG
- 更改 std::set 作为成员属性的顺序
- `sTD :: sample()的输出序列是否遵循输入序列的顺序
- C++ 为什么 std::async 比顺序执行慢
- std::mutex顺序一致吗
- 如何使用 std::shuffle 以随机顺序对具有唯一指针的向量进行洗牌
- 以std::字符串作为关键字,按字典顺序对一个无序映射进行排序
- 调用std::nth_element后第n个元素之前的元素顺序
- 在std ::或std :: unordered_set上保存插入顺序