Получение объединения, пересечения или разности множеств в C ++ - PullRequest
7 голосов
/ 15 ноября 2009

У меня есть пара вопросов о том, как использовать наборы C ++ (std :: set)

  1. Есть ли способ получить объединение, пересечение или различие двух множеств C ++? (Для этого довольно легко написать собственную функцию, но я хотел знать, есть ли для нее встроенная функция)

  2. Можно ли использовать наборы C ++ в качестве ключей на карте?

Ответы [ 3 ]

16 голосов
/ 15 ноября 2009

Используйте функции set_difference(), set_union(), set_intersection() и set_symmetric_difference().

Наборы и карты поддерживают любой тип ключа, который можно сравнивать. По умолчанию это означает, что для типа определен operator<(), но вы можете предоставить свой собственный компаратор. В наборах C ++ не определено operator<(), и поэтому их нельзя использовать в качестве ключей, если вы не предоставите свой собственный компаратор.

9 голосов
/ 15 ноября 2009

Что касается вашего первого вопроса, взгляните на

3 голосов
/ 15 ноября 2009

В качестве ключа на карте можно использовать что угодно, если вы предоставляете класс или функцию, которые могут их сравнивать. Здесь является примером.

...