C++ 向量上的上界<;配对<;int,int>&燃气轮机;
我试图在C++ 向量上的上界<;配对<;int,int>&燃气轮机;,c++,stl,C++,Stl,我试图在向量上使用上限,如下所示: vector<pair<int,int>> data; auto up = upper_bound(data.begin(), data.end(), 0); 矢量数据; 自动向上=上限(data.begin(),data.end(),0); VS2012给了我以下错误: error C2784: 'bool std::operator <(const std::vector<_Ty,_Alloc> &,c
向量上使用上限
,如下所示:
vector<pair<int,int>> data;
auto up = upper_bound(data.begin(), data.end(), 0);
矢量数据;
自动向上=上限(data.begin(),data.end(),0);
VS2012给了我以下错误:
error C2784: 'bool std::operator <(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could not deduce template argument for 'const std::vector<_Ty,_Alloc> &' from 'const int'
错误C2784:'bool std::operator您正在将一对与一个数字进行比较,没有预定义的比较运算符。您可能希望将其更改为以下内容:
auto up = upper_bound(data.begin(), data.end(), make_pair(0, 0));
或者,如果应用程序中有一个特定的逻辑用于将一对数字与单个数字进行比较,则可以提供自己的比较功能:
bool cmp(int n, pair<int, int> const& p)
{
// For instance...
return ((p.first < n) && (p.second < n));
}
int main()
{
vector<pair<int,int>> data;
auto up = upper_bound(data.begin(), data.end(), 0, cmp);
}
bool cmp(整数n,成对常数和对数)
{
//例如。。。
返回((p.firststd::upper_bound
的第三个参数是返回迭代器指向的元素应大于的值。如何确定std::pair
是否大于0
您传递的几乎肯定是std::pair
:
但是,first
和second
取决于您试图解决的问题
为什么它试图将常量int与一对进行比较
因为是你告诉它的。比较值为0
,但元素类型为pair
嘟嘟
也许您正在寻找:
auto up = upper_bound(data.begin(), data.end(), make_pair(0, 0));
如果要搜索不兼容的类型,则需要在比较函数中特别小心。引述自:
比较函数的签名应等同于以下内容:
bool cmp(const Type1 &a, const Type2 &b);
[…]类型Type1
必须确保类型T
的对象可以隐式转换为Type1
。类型Type2
必须使类型为ForwardIt
的对象可以取消引用,然后隐式转换为Type2
。
–在您的情况下,Type1
=int
和Type2
=std::pair
。在这个调用中,上限(data.begin(),data.end(),0)代码>最后一个参数显然是一个数字。显示你的比较器。搜索一个数字可能绝对有意义。事实上,我有一个确切的用例(我正在搜索一条线上包含一个点的间隔)。@不,为什么?标准库中的排序数组搜索算法是根据这个用例明确设计的(请参阅比较函数的文档)。这是一个合法的用途,实际上也是一个非常常见的用途——它是表示范围集合的一种简单而有效的方法。这不是完全等效的吗?哈哈,我已经寻找复杂的东西一个小时了,但我从来没有想过要查看参数(我只是用0来做一些测试)。对不起,我现在很尴尬@是的,是的。“例如……”的意思是说它可以改变。
bool cmp(const Type1 &a, const Type2 &b);