地图键没有可行的重载'='错误

No viable overloaded '=' error with map key

本文关键字:错误 重载 地图      更新时间:2023-10-16

在尝试执行以下操作时出现此错误

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

iteratorValue是一个map字典,map的键与nclock的类型相同。

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

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

using value_type = std::pair<const Key, T>;

注意键是常量元素,不能更改,这是有原因的

std::map是一个排序的关联容器,包含具有唯一键的键值对。键通过比较函数Compare进行排序。搜索、删除和插入操作具有对数复杂度。映射通常以红黑树的形式实现

注意突出显示的点,它们是键,因为您不能更改字典的键。

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

如果您需要更改一个键,您可能希望将旧的项从映射中擦除,并插入另一个具有所需的新键的项。您可能希望交换与现有键关联的value元素。