【发布时间】:2018-07-26 07:11:24
【问题描述】:
在填充 STL 的 unordered_set 之后,我尝试根据特定顺序对每个存储桶中的元素进行排序(尽管容器名称相互矛盾)。众所周知,不能对容器中的元素进行任何更改,据我所知,它会阻止标准 std::sort 工作。例如下一个代码不会编译:
#include <unordered_set>
int main()
{
std::unordered_set<int> set_;
set_.max_load_factor(100);
set_.insert(6);
set_.insert(3);
set_.insert(8);
set_.insert(17);
set_.insert(1);
set_.insert(2);
set_.insert(9);
for (int i = 0; i < set_.bucket_count(); ++i)
{
std::sort(set_.begin(i), set_.end(i));
}
}
那么,是否有解决该障碍的方法?是否可以获取一个临时排序列表,然后将其分配给初始存储桶?
【问题讨论】:
-
很明显,您使用了错误类型的容器。
-
@NeilButterworth 不是很明显。只需要对桶中的少数元素进行排序,而不是在整个容器中进行排序
-
这个练习的最终目标是什么?为什么要关心单个存储桶中元素的顺序?这听起来像XY problem
-
@IgorTandetnik 有一些要点。确定上面的例子是人为的,但是在我的真实代码中,有一个自定义哈希函数可以按照我需要的方式放置元素。并且同一个桶中的项目或多或少地被对待并且对它们进行排序将简化每个桶中的情况
-
请注意,“同一桶中的元素”并不一定意味着“具有相同哈希的元素”。具有相同的哈希是足够的,但不是必要的条件。大多数时候,桶的数量比可能的不同哈希值少得多。所以我有点质疑“以我需要的方式放置元素”的说法。
标签: c++ stl hashtable unordered-map unordered-set