Ну, std::map<Key, Val>
карты Ключ к Val.
То есть m[key]
дает ссылку на val. У вас есть ключ, и вы хотите найти соответствующее значение (или связать значение с этим ключом).
В std::set<Elem>
элемент будет иметь свой собственный ключ. Итак, единственное, что вы можете вернуть, это то, что у вас уже есть. Для чего вы будете использовать эту операцию?
Набор не для сопоставления одно с другим - это то, что делает map . Набор предназначен для записи того, принадлежит ли элемент какой-либо коллекции. Таким образом, единственная разумная вещь, чтобы использовать это для проверки, учитывая некоторый элемент, является ли этот элемент членом набора. Мы делаем это с s.find(elem) != s.end()
или с c ++ 20, s.contains(elem)
.
Тот факт, что набор описан как std::set<Key, ...>
, может быть источником путаницы - я подозреваю, что это только потому, что этоиспользуется для поиска таким же образом, как и ключ карты.
В принципе, вы можете выбрать характеристику набора как map<Elem, bool>
, но если вы не хотите действительно хранить bool (который был бы расточительным), элементсемантика доступа и итератора была бы немного проблематичной. То есть это было бы математически точно и непротиворечиво, но либо расточительно, либо сложно в реализации.