在 unordered_multimap 中,find() return 会是第一个有键的元素吗?
In unordered_multimap, will find() return the first element with the key?
我了解到在std::unordered_multimap
的迭代器序列中,相等的键被组合在一起。是 find()
保证 return 带有键的第一个元素,还是可以 return 任何带有键的元素?是使用键 equal_range
获取所有元素的唯一可靠方法吗?
我对 equal_range()
持谨慎态度,因为它在具有相同键的元素数量上具有线性复杂性,因此如果我可以使用 find()
做到这一点,我会在同一键上节省一次迭代元素。
In unordered_multimap, will find() return the first element with the key?
不能保证。
如果我们假设每个桶都是节点的链表,find
和 equal_range
可能会在桶内进行相同的线性扫描以查找键。这意味着 find
可能 确实 给出了第一个元素。
如果一个实现使用比链表更奇特的东西来存储桶,我猜他们可能真的有分歧:假设它实际上为每个桶保留了一个二叉树,那么 find
可能 return 树中最高的匹配而不是最左边的匹配。
我不确定这样的实现是否存在或是否符合要求。
我了解到在std::unordered_multimap
的迭代器序列中,相等的键被组合在一起。是 find()
保证 return 带有键的第一个元素,还是可以 return 任何带有键的元素?是使用键 equal_range
获取所有元素的唯一可靠方法吗?
我对 equal_range()
持谨慎态度,因为它在具有相同键的元素数量上具有线性复杂性,因此如果我可以使用 find()
做到这一点,我会在同一键上节省一次迭代元素。
In unordered_multimap, will find() return the first element with the key?
不能保证。
如果我们假设每个桶都是节点的链表,find
和 equal_range
可能会在桶内进行相同的线性扫描以查找键。这意味着 find
可能 确实 给出了第一个元素。
如果一个实现使用比链表更奇特的东西来存储桶,我猜他们可能真的有分歧:假设它实际上为每个桶保留了一个二叉树,那么 find
可能 return 树中最高的匹配而不是最左边的匹配。
我不确定这样的实现是否存在或是否符合要求。