[英]C++ stringstream error: no match for operator<< for operand types std::string and const unsigned int
[英]How to understand C++ error, “no match for 'operator==' (operand types are 'std::pair' and 'const int')”?
我在代碼塊上編譯以下代碼,並得到以下錯誤聲明
C:\\ Program Files(x86)\\ CodeBlocks \\ MinGW \\ lib \\ gcc \\ mingw32 \\ 4.9.2 \\ include \\ c ++ \\ bits \\ predefined_ops.h | 191 |錯誤:“ operator ==”不匹配(操作數類型為' std :: pair'和'const int')
頭文件predefined_ops.h
文件predefined_ops.h
也會顯示一個錯誤:
template<typename _Iterator>
bool
operator()(_Iterator __it)
{ return *__it == _M_value; }//error
};
這是我正在編譯的代碼
#include <bits/stdc++.h>
using namespace std;
class Soham
{
int *a,n;
map<int,int> m;
public:
Soham(int x);
void search1(int,int,int,int);
};
Soham::Soham(int x)
{
n=x;
a=new int[n];
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(abs(a[i]-a[j])<=1)
{
search1(a[i],a[j],i,j);
}
}
}
map<int,int> ::iterator it1;
for(it1=m.begin();it1!=m.end();it1++)
{
cout<<it1->first<<"-->"<<it1->second<<endl;
}
}
void Soham::search1(int x,int y,int i1,int j1)
{
if(m.empty())
{
m.insert(std::pair<int,int>(x,i1));
m.insert(std::pair<int,int>(y,j1));
}
else
{
map<int,int>::iterator it,it1;
it=find(m.begin(),m.end(),x);
it1=find(m.begin(),m.end(),y);
if(it!=m.end()|| it1!=m.end())
{
if (it!=m.end() && it->second!=i1)//chance of error
{
m.insert(std::pair<int,int>(it->first,i1));
}
if(it1!=m.end() && it1->second!=j1)//chance of error
{
m.insert(std::pair<int,int>(it1->first,j1));
}
}
//find failed to find element in the map how to show this particular condition
else //error
{
if(it!=m.end())
{
m.insert(std::pair<int,int>(x,i1));
}
if(it1!=m.end())
{
m.insert(std::pair<int,int>(y,j1));
}
}
}
}
int main()
{
int n;
cin>>n;
Soham a(n);
return 0;
}
根據錯誤聲明,我正在使用==運算符進行無效比較,但我沒有得到它,這是在以下情況下最有可能發生錯誤的地方
if (it!=m.end() && it->second!=i1)
if(it1!=m.end() && it1->second!=j1)
在第二次檢查中,我正在檢查對(it-> second)的第二個元素,該元素的類型為int,具有整數變量i1,那么為什么用==運算符會發生錯誤。 如果不是這樣,我可能以錯誤的方式理解了錯誤,並據此解釋了我的理解。 是什么導致錯誤以及如何糾正錯誤?
更改以下行,它將運行
//it=find(m.begin(),m.end(),x);
it = m.find(x);
//it1=find(m.begin(),m.end(),y);
it1 = m.find(y);
基本上,您必須使用find
成員函數而不是find
算法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.