Проблема в том, что вы пытаетесь сравнить указатели, которые отличаются! Я бы не знал причин использования unique_ptr <>, но при этом вы фактически пытаетесь сравнить тождества, а не состояния, что вам и нужно.
Итак, вы можете понять, что я имею в виду, скажем, первое Блок-объект находится в позиции 100 в вашей памяти. Это было бы его личность. Таким образом, у нас есть объект1, чье состояние «mod1, работа» и чья идентичность 100. Затем у нас есть объект2, чья идентичность 150, но его состояние совпадает с object1, «мод1, работа».
Все что у вас есть как внутри вектора, так и unordered_set являются указателями, поэтому у вас есть позиции в памяти. Вставляя их в вектор, вы вставили, скажем, позицию 100. Но в unordered_set вы вставили 150. У них такое же состояние, но метод find ищет позицию в памяти.
Я надеюсь, что мой ответ было полезно. Если вы обнаружите здесь какие-либо ошибки или думаете иначе, пожалуйста, дайте мне знать. Удачи! :)