- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在阅读图书馆的代码库时遇到了以下问题。
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/
我正在尝试键入别名 std::make_pair 函数以将其用作 abc::make_pair 函数。 auto(*make_pair)() = std::make_pair; namespace a
通常是 =在变量声明中,编译器将其视为移动构造。例如: vector foo = vector(13, 0); 将调用vector::vector(vector&&)构造函数。 这如何与 make_p
我已经用过typedef typedef std::pair coords; typedef std::pair fcoords; 然后创建此数据类型的 vector std::vector open
用std::make_pair there is only one implementation C++14 onwards templateconstexpr std::pair make_pair
我有一个这样的 map (第一个和第二个参数都是唯一的): std::map mapTest; mapTest.insert(make_pair(1, 101)); mapTest.insert(ma
make_pair 可以在不提及类型的情况下创建对。我想对我的类使用相同的技巧,但它继承自 boost::noncopyable,因此无法编译: template struct bit_writer
std::pair currentData; void OnCallback() { Object object = getObject(); OtherObject* otherOb
这个问题在这里已经有了答案: C++11 make_pair with specified template parameters doesn't compile (1 个回答) 关闭 9 年前。
MSVC++“实用程序” header 中 make_pair 的定义是: template inline pair make_pair(_Ty1 _Val1, _Ty2 _Val2) { // re
如果我从不同的范围将它插入到 map 中,是否需要分配一对? #include #include #include #include using namespace std; void par
在我最近编写的代码中,我注意到一个奇怪的行为。 当我使用第一个参数为 std::pair 的 make_pair 时,make_pair 变得“神奇地”在命名空间中可用(我不必使用 std:: 限定符
我有以下代码 #include using namespace std; int a = ...//gets calculated somehow
我正在尝试用 SDL_ttf 制作一个字体字典,就像我用 SDL_image 制作一个字典一样。由于字体是用 pnt_size 存储的,所以我制作了一个包含此信息的结构: struct fon
众所周知,make_pair 推导类型。这就是它存在并且方便的原因。现在看到这个 example : std::pair foo; std::pair bar; foo = std::make_p
考虑这个函数: std::pair getPair() { return std::make_pair(0, 0); } 为什么会编译? 不应该make_pair返回 std::pair这与
使用make_pair后,我得到了一些pairToCount 在这种格式中(元素 1 元素 2)= Db 中的频繁数: (1 2) = 1 (1 3) = 1 (1 4) = 1 (2 3) = 2
设计用于利用模板推导来实例化其模板类拷贝的函数类型有一个正式名称。 std::make_pair 是此类方法的主要示例。想到了术语“辅助方法”,但我记得还有一个更具体的术语……我就是想不起来了。 最佳
我在阅读图书馆的代码库时遇到了以下问题。 errorMap,在下面的代码中使用定义为: map > errorMap; 代码的相关部分是: errorMap["substitutions"] += m
我遇到了一些奇怪的事情,我想得到解释。以下代码片段提供了一个简单的类模板 type和两个 operator #include template class type { public: T v
我在使用模板成员重载运算符和使用 make_pair 时遇到了一些问题: class MyArchive { public: template MyArchive & operato
我是一名优秀的程序员,十分优秀!