Как присвоить пару?
Ваше присваивание выполняет p1.first = p2.first и p1.second = p2.second. Но вы запретили присваивать в p1.first, объявив его как const.
почему вот это не компилируется?
Потому что первый элемент пары -- константа, присваивать ему нельзя.

если строки не константны - то все работает
Ну да, что тут удивительного?