使用插入 C++ 后维护无序集中的顺序
Maintaining order in an unordered set after using insert C++
在构造过程中使用插入(或放置)而不进行分配后,如何保留无序集合中元素的顺序?
有关此问题的详细信息,请参见示例:
- 构造了无序整数集S
- 480 插入到 S 中:S = { 480 }
- 32 插入到 S 中:S = { 32 480 }
- 23 插入到 S 中:S = { 23 32 480 }
- 16 插入到 S 中:S = { 16 23 32 480 }
- 19 插入到 S 中:S = { 19 480 32 23 16 }
您可以看到最后一次插入是如何破坏序列顺序的(我假设通过重建一个更大的集合并将元素移动过来)。我正在寻找一种方法来在插入元素后保留先前的顺序,而无需在构造函数中专门分配。
根据定义,无序集是无序的。没有明确的顺序,集合中元素的迭代顺序可以随时更改。
在构造函数中分配一些东西也不会有任何区别。
如果您想要一个具有特定迭代顺序的集合,这就是 std::set
的用途。但是,std::set
始终按键值而不是插入顺序排序。
您可能需要将多个容器组合在一起,以实现您想要的访问语义。
无序集通常基于散列函数分配,访问时间为 O(1)。
有序集通常基于AVL树,访问基于键之间的比较函数。他们一般有 O(log(n)) 的访问时间,但密钥顺序更保守。
如果您想要快速访问或使用地图中的排序键进行几乎同样快速的访问,则需要三思。但是不可能同时拥有这两者(比如量子物理学中的不确定问题:))
在构造过程中使用插入(或放置)而不进行分配后,如何保留无序集合中元素的顺序?
有关此问题的详细信息,请参见示例:
- 构造了无序整数集S
- 480 插入到 S 中:S = { 480 }
- 32 插入到 S 中:S = { 32 480 }
- 23 插入到 S 中:S = { 23 32 480 }
- 16 插入到 S 中:S = { 16 23 32 480 }
- 19 插入到 S 中:S = { 19 480 32 23 16 }
您可以看到最后一次插入是如何破坏序列顺序的(我假设通过重建一个更大的集合并将元素移动过来)。我正在寻找一种方法来在插入元素后保留先前的顺序,而无需在构造函数中专门分配。
根据定义,无序集是无序的。没有明确的顺序,集合中元素的迭代顺序可以随时更改。
在构造函数中分配一些东西也不会有任何区别。
如果您想要一个具有特定迭代顺序的集合,这就是 std::set
的用途。但是,std::set
始终按键值而不是插入顺序排序。
您可能需要将多个容器组合在一起,以实现您想要的访问语义。
无序集通常基于散列函数分配,访问时间为 O(1)。
有序集通常基于AVL树,访问基于键之间的比较函数。他们一般有 O(log(n)) 的访问时间,但密钥顺序更保守。
如果您想要快速访问或使用地图中的排序键进行几乎同样快速的访问,则需要三思。但是不可能同时拥有这两者(比如量子物理学中的不确定问题:))