Я думаю, что для логина такой тупой матчинг подойдёт, потому что я не собираюсь добавлять или удалять существующие элементы/поля(username, email, password), но вот для других задач такой подход точно всё сломает.
кстати, требование коммутативности меня удивляет, кажется, что выигрыш в производительности / простоте по сравнению с некоммутативной групповой операцией невелик