gpt4 book ai didi

c++ - 将键移出 std::map<> &&

转载 作者:行者123 更新时间:2023-12-05 00:10:26 25 4
gpt4 key购买 nike

我想说getKeys()函数从 map 中获取不可复制的 key :

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 中的 key ( .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 的键容器不能被修改,但对于在 key 修改后立即被破坏的 map 是否仍然不允许?

最佳答案

Note: In our environment I'm not allowed to use C++17 function std::map::extract().



耻辱 - 它被引入来解决这个问题。

Is it somehow ok to use const_cast because map will be destructed anyway?



不。

I want to avoid cloning MyObj.



对不起;您至少需要克隆 key 。

I know why keys of a std::map container cannot be modified but is it still disallowed for a map that is going to be destructed immediately after the key modification?



是的。

map 的内部机制无法知道它的命运正在等待。

关于c++ - 将键移出 std::map<> &&,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58268530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com