Допустим, у меня есть несколько экземпляров мультимножества, и мне дан итератор it
для одного из экземпляров, но мне не сказано, к какому экземпляру принадлежит этот итератор. Существует ли способ O(1) для каждого экземпляра определить, принадлежит ли этот итератор этому экземпляру или нет? Для этого я думаю, что мультимножественный контейнер должен включать какую-то хэш-таблицу для итераторов, которые он содержит, но я не верю, что библиотека STL делает это.
Я не смог найти в документации функцию, которая делала бы это, поэтому единственный подход, который я могу придумать, это сначала отдать должное заданному итератору и использовать instance.find(*it)
, а если он найден, мы используем std::multiset::equal_range
для выполнения линейный поиск, чтобы увидеть, является ли один из итераторов, указывающих на одно и то же значение, заданным итератором.
Когда вы говорите «контейнеры», вы имеете в виду разные экземпляры одного и того же контейнера, а не разные типы? Я всегда думал, что «контейнеры» означают такие вещи, как векторы, наборы, карты и т. д., а не экземпляры вектора или набора и т. д.
Термин «контейнер» в основном взаимозаменяем и может относиться либо к отдельным шаблонам, либо к экземплярам этих шаблонов. Как я использую его здесь, он относится к конкретным экземплярам классов шаблонов. Так же, как термин «автомобиль» может относиться к любому устройству, имеющему четыре колеса, пару дверей, несколько сидений, руль и некоторые другие общие черты; и это также может относиться к конкретному, отдельному куску ржавчины на вашей дороге.