映射键没有可行的重载'='错误

ale*_*xrr 3 c++ dictionary operator-overloading

我在尝试执行以下操作时遇到此错误

Rellotge nclock(request, mclock);
if (oldclock < nclock) (iteratorValue[tasknum-1])->first = nclock;
Run Code Online (Sandbox Code Playgroud)

iteratorValue是一个地图字典,地图的键与nclock的类型相同.

   Agenda.cc:65:70: error: no viable overloaded '='
                if (oldclock < nclock) (iteratorValue[tasknum-1])->first = nclock;
Run Code Online (Sandbox Code Playgroud)

Den*_*rim 5

std::map<Key, T>字典中元素的类型是一对如下.

using value_type = std::pair<const Key, T>;
Run Code Online (Sandbox Code Playgroud)

注意,键是一个常量元素,它不能被改变,这是有原因的.

std :: map是一个有序关联容器,包含具有唯一键的键值对.使用比较功能比较对键进行排序.搜索,删除和插入操作具有对数复杂性.地图通常实现为红黑树

请注意突出显示的点,它们是您无法更改字典键的原因.

  • 由于它是一个已排序的容器,使用键来命令元素以便更快地查找,通过在任何时候更改密钥,您将破坏容器,因为您最终会使所有排序无效.
  • 通过更改密钥,您可以在不知道容器的情况下复制关键元素,这将破坏唯一密钥保证.

如果您需要更改密钥,您可能希望从地图上删除旧项目并使用新的所需密钥插入另一个项目.您可能希望交换与现有密钥关联的value元素.