gpt4 book ai didi

c++ - 使用 std::map [] 运算符交换与分配(const 问题)

转载 作者:行者123 更新时间:2023-11-30 03:00:42 25 4
gpt4 key购买 nike

我目前在 std::map 上使用 [] 运算符:

map[key] = value;

没什么太疯狂的。但是,我的值包含一个常量公共(public)成员:

class Value
{
public:
Value(int input) : member(input) { }
const int member;
};

在不深入了解我的应用程序的细节的情况下,const 成员是我们想要保留的东西。鉴于此,我假设 map[key] = value 正在做一些事情,比如首先删除现有值,然后插入新值:

map.erase(map.find(key));
map.insert(make_pair(key, value));

但是,实际上似乎发生的是 operator [] 返回对值的引用,因此尝试使用 = 赋值或移动运算符或其他东西。显然,这行不通,因为无法重新分配成员。现在,我可以只调用删除然后插入自己,但我想知道是否有一种方法可以实现使用这种“交换”技术的 map[key] = value

最佳答案

没有简单的方法可以在 C++ 中实现这样的 map 。想一想:为了做到这一点,你必须让 map[] 返回一个代理对象,该代理对象带有一个重载的赋值运算符,然后在底层映射上调用删除和删除,同时还要小心确保它仍然作为引用运行用作右值时的值。返回引用是唯一明智的做事方式,也更直观。

至于如何做你想做的事,你可能应该只写一个函数来这样做,然后调用该函数,而不是试图直接将元素分配给 map 。

关于c++ - 使用 std::map [] 运算符交换与分配(const 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11788810/

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