Хотелось бы, скажем, функцию getKeys()
, извлекающую не копируемые ключи из map
:
class MyObj {
// ... complex, abstract class...
};
struct Comparator { bool operator()(std::unique_ptr<MyObj> const &a, std::unique_ptr<MyObj> const &b); };
std::vector<std::unique_ptr<MyObj>> getKeys(std::map<std::unique_ptr<MyObj>, int, Comparator> &&map) {
std::vector<std::unique_ptr<MyObj>> res;
for (auto &it : map) {
res.push_back(std::move(it.first));
}
return res;
}
Но она не работает, потому что ключ в it
(.first
) - это const
. Любые советы, как это решить? Примечание: в нашей среде мне не разрешено использовать функцию C ++ 17 std::map::extract()
.
Можно ли использовать const_cast
как-нибудь нормально, потому что map
все равно будет уничтожено?
res.push_back(std::move(const_cast<std::unique_ptr<MyObj> &>(it.first)));
Я хочу избежать клонирования MyObj
.
Я знаю, почему ключи контейнера std::map
не могут быть изменены, но все еще не разрешено для карты, которая будет уничтожена сразу после ключамодификация