gpt4 book ai didi

c++ - += 一对运算符和 make_pair 与模板

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:40 26 4
gpt4 key购买 nike

我在阅读图书馆的代码库时遇到了以下问题。

errorMap,在下面的代码中使用定义为:

map <const string, pair<int, double>> errorMap;

代码的相关部分是:

errorMap["substitutions"] += make_pair<int,double>(targetLength, substitutions);
errorMap["insertions"] += make_pair<int,double>(targetLength, insertions);
errorMap["deletions"] += make_pair<int,double>(targetLength, deletions);

以上部分是抛this编译错误。当通过它自己的构建系统运行库时,代码似乎正在编译。有人可以阐明这里到底发生了什么吗?

PS:我已经查看了 cppreference 和其他网站上的配对文档,它们都没有为配对指定 += 运算符。这是我第一次遇到带有模板参数的 make_pair,我也找不到更多信息。

最佳答案

这与配对无关,与 map 有关。 operator [] 用于在 map 中插入或更新元素。

例如在 std::map<char, int> myMap{{'a', 27}, {'b', 3}, {'c', 1}}; ,我可以执行以下操作(如上面链接的页面所示):

myMap['a'] = 6; //to change the value associated to 'a'
myMap['d'] = 8; //to insert a new value

我还可以执行以下操作:

myMap['b'] += 9; //Now the value associated to b is 3 + 9 = 12

在问题中发布的 3 行代码中,正在更新与括号内的字符串关联的值。

operator+=对于与模板的配对,可能已经过载。 (查看此 question 的答案)这可能就是为什么您会收到这些错误而不是以下错误(将字符替换为字符串):

error: no match for ‘operator+=’ (operand types are ‘std::map<char, std::pair<int, double> >::mapped_type {aka std::pair<int, double>}’ and ‘std::pair<int, double>’)

由于相同的操作不会重现相同的错误,问题来自更深层次的实现,而您没有提供上下文。它们可能与右值和左值有关:

cannot convert ‘targetLength’ (type ‘int’) to type ‘int&&’

您[可能][1] 想看看那些 answers为此。

[1]:可能是因为我不确定自己在说什么。我想发表评论,但没有足够的代表,所以我尽力回答。

关于c++ - += 一对运算符和 make_pair 与模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43839897/

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