如何解决对和花括号检查
#include <bits/stdc++.h>
using namespace std;
int main()
{
pair<int,int>p = {1,3};
if (p=={1,3})
cout << "yeyey\n";
}
我要检查这对括号内的整数是否相同,但返回错误
"expected unqualified-id before ')' token if (p=={1,3}) cout << "yeyey\n";"
有人可以解释为什么吗?
解决方法
在这种情况下,语言{1,3}
的工作方式无法解析为一种类型,因此您需要:
// since c++17
p == std::pair{1,3}
// before
p == std::make_pair(1,3)
,
{1,3}
的类型不能用于直接推论std::pair<K,T>
。您需要使用std::make_pair()
来解决此问题:
#include <utility>
#include <iostream>
int main() {
std::pair<int,int>p = {1,3};
if (p==std::make_pair(1,3))
std::cout << "yeyey\n";
}
自c ++ 17起,您可以选择将std::pair<T,K>
的临时变量与直接初始化程序一起使用:
if (p==std::pair{1,3})
观看在线演示here。
,要使用运算符==
,您需要比较两对,但是{1,3}
不是一对。为此,您需要cast
对象成对。就像您将整数转换为浮点数float f = (float)123
一样。为此,正确的方法是:
#include <iostream>
using namespace std;
int main(void)
{
pair<int,int> p = { 1,3 };
if (p == (pair<int,int>{1,3}))
cout << "yay!" << endl;
}
还请注意,指定using namespace std;
是一个坏习惯,不应使用。
我不是STL专家,还是不能告诉您,您不能像这样初始化一对。您必须调用其参数化构造函数或make_pair()
函数模板。
pair <int,int> p(1,3); //constructor one
pair <int,int> p = make_pair(1,3); // function template
当然可以做到。
#include <bits/stdc++.h>
using namespace std;
int main()
{
pair<int,int>p;
p = {1,3}; // This here is actually the overloaded assignment operator which is copying
}
您也无法将您的货币对与{1,3}进行比较:
if(p == make_pair(1,3)) // this
if (p.first == 1 && p.second == 3) // or this
如果我想了解一些内部结构,应该阅读文档,因为我对此并不了解。
,您还可以在if +结构化绑定中使用init语句在C ++ 17中执行此操作:
#include <utility>
int main()
{
std::pair<int,int> p{1,2};
if(auto &[x0,x1] = p; x0 == 1 && x1 == 2)
return 0;
return 1;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。