Контейнеры имеют разные способы доступа к ним, потому что они изначально разные. В STL ближе всего находятся итераторы. Все стандартные контейнеры имеют итераторы, поэтому вы можете выполнять итерации по ним и использовать те же алгоритмы для них, используя эти итераторы. Однако то, что содержит каждый итератор, отличается в зависимости от контейнера (элемент должен быть просто, а у карт есть пары). И если вы рассматриваете пару как контейнер, она не будет соответствовать остальным, потому что у нее нет итераторов.
В большинстве случаев использование итераторов решает проблему. Однако, очевидно, что это не полностью решает проблему, и у STL нет решения для этого. Повысить может, но я не знаю ни одного.
Суть, однако, заключается в том, что контейнеры по своей сути различны и в значительной степени не предназначены для взаимозаменяемости. Используя стандартные итераторы, большинство контейнеров можно легко заменить друг на друга. Но обычно нет смысла менять один контейнер на другой, не изменяя часть кода вокруг него, потому что они действуют по-разному. Я полагаю, что Скотт Мейерс подчеркивает это в своей книге «Эффективный STL».
Если вы действительно пытаетесь сделать различные контейнеры взаимозаменяемыми, я бы посоветовал переосмыслить это и присмотреться к тому, что вы делаете. Скорее всего, это не лучшая идея. Теперь, это может быть хорошей идеей для вашего конкретного приложения - я, конечно, не могу сказать, ничего не зная об этом, и вы были бы лучшим судьей этого - но в общем случае, сделать контейнеры действительно взаимозаменяемыми является плохая идея. Итераторы позволяют повторно использовать многие алгоритмы для них, но даже там тип алгоритмов, которые вы можете использовать в конкретном контейнере, варьируется в зависимости от типа итераторов, которые этот контейнер использует (произвольный доступ, двунаправленный и т. Д.).
Итак, нет, я не знаю о существующем ранее решении для доступа к элементам контейнера, кроме итераторов, но, вообще говоря, я бы посоветовал не пытаться это делать. Контейнеры не являются действительно взаимозаменяемыми и не предназначены для этого.