你能找到多重集的哪个实例包含给定的迭代器吗?

问题描述

假设我有几个多集实例,并且我得到了一个迭代器 it 到其中一个实例,但是我没有被告知这个迭代器属于哪个实例。对于每个实例,是否有 O(1) 方法来确定此迭代器是否属于此实例?为此,我认为 multiset 容器必须为它所拥有的迭代器包含某种哈希表,但我不相信 STL 库会这样做。

我在文档中找不到可以执行此操作的函数,因此我能想到的唯一方法是首先遵循给定的迭代器并使用 instance.find(*it),如果找到,则使用 {{1 }} 进行线性搜索以查看指向相同值的迭代器之一是否是给定的迭代器。

解决方法

简短回答:不,没有。此外,以某种形式或方式将迭代器与不是它来自的容器一起使用是未定义的行为。最后,比较来自不同容器的两个迭代器也是未定义行为,因此您描述的解决方法也是未定义行为。

以上适用于 C++ 库中的所有容器,而不仅仅是多重集。

迭代器引用的对象需要以某种形式或方式引用它们所属的容器;没有任何其他实用的替代方案。