Английский не мой родной язык: извините за мои ошибки. Заранее благодарю за ваши ответы.Биологическое отображение целых чисел
Я изучаю C++, и я пытаюсь проверить, насколько два набора с одинаковым числом целых чисел - в любом порядке - являются биективными.
Пример:
int ArrayA [4] = { 0, 0, 3, 4 };
int ArrayB [4] = { 4, 0, 0, 3 };
Arraya и ArrayB биективны.
Моя реализация наивна.
int i, x=0;
std::sort(std::begin(ArrayA), std::end(ArrayA));
std::sort(std::begin(ArrayB), std::end(ArrayB));
for (i=0; i<4; i++) if (ArrayA[i]!=ArrayB[i]) x++;
Если x == 0, то два набора являются биективными. Легко.
Моя проблема заключается в следующем: я хотел бы подсчитать количество биекций между наборами, а не только все свойство отношения между ArrayA и ArrayB.
Пример:
int ArrayA [4] = { 0, 0, 0, 1 }
int ArrayB [4] = { 3, 1, 3, 0 }
ли наборы биективным в целом? Нет. Но есть 2 биекции (0 и 0, 1 и 1).
С моим кодом выход будет 1 биекцией. Действительно, если мы сортируем массивы, получаем:
ArrayA = 0, 0, 0, 1; ArrayB = 0, 1, 3, 3.
Бок о бок comparaison показывает только взаимно однозначное соответствие между 0 и 0.
Тогда мой вопрос: Вы знаете способ отображения элементы между двумя одинаковыми размерами и подсчитывают количество биекций, независимо от порядка целых чисел?
Решенный!
Ответ дается Ивайло Strandjev работы:
- Сортировать наборы,
- Используйте функцию std::set_intersection,
- Profit.
Как насчет чего-то вдоль строк 'int i = 0, j = 0, count = 0; while (i