Скажем, у меня есть карта:
std::map<std::unique_ptr<SomeType>, SomeOtherType> map;
Очевидно, это не сработает, потому что ключевое значение нашей карты - это уникальный ptr, а не необработанный:
//a pointer from somewhere else in the code
SomeType* p = ...;
auto result {map.at(p)};
Вместо этого можно сделать что-то вроде этого, используя std :: unique_ptr.get ():
SomeType* p = ...;
for(auto& entry : map) {
if(entry.first.get() == p) {
//do whatever
}
}
Однако это очень уродливый и, возможно, неэффективный способ.У меня вопрос просто: есть ли способ использовать функцию .at () в этом случае?