Вот код на Ruby:
#!/usr/bin/env ruby
# frozen_string_literal: true
require 'set'
def relation_is_func?(xset, yset, rset)
x_is_correct = (rset.map(&:keys).flatten - xset.to_a).empty?
y_is_correct = (rset.map(&:values).flatten - yset.to_a).empty?
r_is_correct = rset.map(&:keys).flatten.sort == xset.to_a.sort
x_is_correct && y_is_correct && r_is_correct ? 'Function.' : 'Not function.'
end
x = Set[1, 2, 3, 4]
y = Set['a', 'b', 'c', 'd', 'e']
r = Set[{ 2 => 'b' }, { 1 => 'b' }, { 3 => 'b' }, { 4 => 'a' }]
relation_is_func?(x, y, r) #=> "Function."
x = Set[1, 2, 3, 4]
y = Set['a', 'b', 'c', 'd', 'e']
r = Set[{ 1 => 'b' }, { 2 => 'b' }, { 3 => 'b' }, { 4 => 'b' }, { 2 => 'c' }]
relation_is_func?(x, y, r) #=> "Not function."
x = Set[1, 2, 3, 4]
y = Set['a', 'b', 'c', 'd', 'e']
r = Set[{ 1 => 'c' }, { 2 => 'a' }, { 4 => 'b' }]
relation_is_func?(x, y, r) #=> "Not function."
Примечания:
- Заморачиваться с вводом данных я не стал, просто захардкодил три примера.
- Реализовать упорядоченные пары можно разными способами, я использовал хэши. Можно было реализовать и по-другому (Struct, например).
- Для множеств я использовал Set.
- Проверка корректности входных данных реализована частично. Можете подумать, что стоит добавить.
- В примерах: x - множество X; y - множество Y; r - отношение между X и Y (для которого надо выполнить проверку того, что это функция).
- Запустить на выполнение можно так: сохранить в файл, допустим, test.rb и в терминале выполнить команду:
irb test.rb
На C++ реализуйте сами.