Что такое оператор сравнения для ссылок?

Я могу создать набор указателей на C ++ вот так:

std::set<Data*> data_set;

Есть ли аналогичный способ написать это:

SortedSet<Data> data_set;

Изменить: я хочу использовать аналогичную логику порядка в С #. Данные - это простой производный класс от Object.


person LmTinyToon    schedule 04.08.2016    source источник
comment
может быть полезной stackoverflow .com / questions / 1072786 /.   -  person Vladimir    schedule 04.08.2016
comment
Не могли бы вы подробнее рассказать, что вы собираетесь делать? Если вам нужен отсортированный набор на C # с другой сортировкой, чем та, что когда-либо предоставляла SortedSet, реализуйте интерфейс IComparer в классе и переопределите метод Compare.   -  person Ingenioushax    schedule 04.08.2016
comment
Если вы хотите иметь набор уникальных экземпляров объектов, когда эти объекты не имеют логического порядка, вам следует использовать HashSet, а не SortedSet.   -  person Servy    schedule 04.08.2016
comment
Да, мне просто нужен набор уникальных экземпляров объекта   -  person LmTinyToon    schedule 04.08.2016
comment
Тогда вам нужно сказать это в своем вопросе, а не просить чего-то существенно другого.   -  person Servy    schedule 04.08.2016


Ответы (2)


Попробуйте использовать HashSet. Набор - это коллекция, не содержащая повторяющихся элементов.

HashSet<Data> data_set = new HashSet<Data>();
data_set.Add(new Data());
person Roman Marusyk    schedule 04.08.2016
comment
Я думаю, что он не понимает, сравнивая ссылки в C #, он не пытается найти, какой тип коллекции ему следует использовать. - person sachin; 04.08.2016

В большинстве случаев C # не говорит явно об указателях и ссылках, таких как C ++. Однако, если вы создаете коллекцию объектов, она всегда будет неявно набором ссылок на объекты (обратите внимание, что в данном случае я сказал «объекты»; типы значений обрабатываются по-разному). (В большинстве случаев C # использует ссылки, а не указатели per se - см. здесь в качестве исключения). Затем вы можете выполнить ссылочное равенство с помощью оператора «==».

Предоставленный вами код C # на самом деле будет иметь такой же эффект, что и предоставленный вами код C ++ (за исключением того, что, конечно, вам не нужно явно указывать указатель / ссылку).

person EJoshuaS - Reinstate Monica    schedule 04.08.2016