将equal_range用于unordered_map

cod*_*707 4 c++

因为这是有道理的,lower_bound并且因为元素没有顺序upper_bound而缺席std::unordered_map

但是std::unordered_map有方法equal_range。它返回对应于键的范围的迭代器。

它有什么意义?由于只能有一个带有键的元素std::unordered_map。这只是find方法。

另外,在中std::unordered_multimap,它的存在是否意味着在unordered_multimap使用迭代器进行迭代时,具有相同键的所有元素将始终在一起?

Nat*_*ica 5

它有什么意义?

有点。该标准要求所有关联的容器都提供,equal_range因此非multi容器需要提供它。它确实使编写通用代码更加容易,所以我怀疑这就是为什么要求所有容器都使用它的原因。

它的存在是否意味着在使用迭代器迭代unordered_map时,具有相同键的所有元素将始终在一起?

其实,是。由于所有键都具有相同的值,因此它们将散列为相同的值,这意味着它们都将存储在同一存储桶中,并且由于键比较相等而将它们分组在一起。来自[unord.req] / 6

如果无序关联容器的每个键最多包含一个元素,则它支持唯一键。否则,它支持等效键。unordered_set和unordered_map支持唯一键。unordered_multiset和unordered_multimap支持等效键。在支持等效键的容器中,具有等效键的元素以容器的迭代顺序彼此相邻。因此,尽管未指定无序容器中元素的绝对顺序,但其元素被分组为等效键组,以使每组中的所有元素都具有等效键。除非另有说明,否则对无序容器进行的突变操作应保留每个等效键组中元素的相对顺序。

重点矿

  • 如果它们在同一个桶中,并不意味着它们本身是连续的,因为其他元素可以在同一个桶中 (2认同)