Этот SO-ответ говорит, что STL Map с вектором для ключа вектора может использоваться в качестве ключа. Поэтому, когда мы используем вектор в качестве ключа. Как это на самом деле работает, так как ключ должен быть уникальным, поэтому, когда мы вставляем другой вектор с такими же элементами, map
проверка на дублирующийся элемент за элементом или имя вектора действительно что-то указывает? Как имя массива представляет базовый адрес. Таким образом, массив может быть использован в качестве ключа, поскольку базовый адрес может быть использован в качестве ключа в этом случае, но каков ключ в случае вектора. Как это работает внутри.
Потому что, когда я печатаю имя вектора, я получаю ошибку
vector<int> v;
cout<<v; //error
has operators == and <
как это поможет? мой вопрос состоял в том, чтобы проверить дубликаты элементов, сопоставить сопоставление ключевого элемента вектора с элементомstd::vector
качестве ключа дляstd::map
. Вы платите за то, что используете . Это можно сделать, и, возможно, для этого есть несколько вариантов использования, но, безусловно, вы можете изменить предпочитаемую структуру данных. Контейнеры STL спроектированы так, чтобы быть максимально универсальными и удобными для использования любым способом, который пользователь может захотеть использовать.std::map
скопирует ключ и значение в себя.std::unordered_map
может хранить хэш ключа.Ответы:
Для шаблона класса std :: vector есть перегруженный оператор <.
это основано на стандартном алгоритме
std::lexicographical_compare
.Вот демонстрационная программа.
Его вывод
Таким образом, класс можно использовать как ключ в карте.
По умолчанию карта шаблона класса использует объект функции std :: less, который в свою очередь использует оператор <
Однако нет перегруженного оператора << для шаблона класса std :: vector.
источник
Название объекта и содержание этого объекта всегда не связаны между собой.
operator ==
forstd::vector
сначала сравнивает длину векторов, а затем также использует каждый из его элементовoperator ==
.operator <
сравнивает элементы в векторе лексикографически, т.е. возвращаетx[i] < y[i]
первый неравный элемент в векторахx
иy
.Это требования
std::map
к типу, используемому какKey
. Посколькуstd::vector
удовлетворяет обоим, он может быть использован какKey
. Обратите внимание, что для типа, управляемого вектором, эти операторы также должны быть перегружены, чтобы это работало (посколькуstd::vector
эти операторы используют свои собственные операторы).источник