Когда вы вставляете элемент в карту, используя operator[]
, происходит то, что карта вставляет созданный по умолчанию объект для указанного ключа, на который следует ссылаться, тогда назначаемое вами значение копируется в этот созданный по умолчанию объект.
Для создания этого объекта, созданного по умолчанию, должен быть доступен конструктор по умолчанию.В вашем случае, если вы указали конструктор, который принимает два аргумента (и не предоставили значения по умолчанию для этих аргументов), компилятор не автоматически синтезирует для вас конструктор по умолчанию.
В этих условиях я бы, вероятно, изменил ваш конструктор на что-то вроде этого:
Data(int a=0, int b=0) : x(a), y(b) {}
Обратите внимание, что обычно предпочтительнее инициализировать переменные в списке инициализации (если это возможно), чем присваиватьих в теле конструктора.