【发布时间】:2017-03-05 05:17:53
【问题描述】:
我有一个 v 类实例的向量 X
class X
{
public:
int attribute_1;
...
operator==(const int i){return this->attribute_1 == i;}
};
std::vector<X> v;
向量v按属性attribute_1排序。我想执行binary_search 来测试给定整数是否与X 实例之一的attribute_1 匹配。我试过了
int elem = 12
bool isElementPresent = std::binary_search(
v.begin(),
v.end(),
elem,
[](const X& right, const X& left){return right.attribute_1 < left.attribute_1;}
)
)
但是编译失败。如果我创建一个X 的实例并将attribute_1 设置为elem,那么它可以工作,但我想避免这样做(因为1. 时间构建类X 的对象有很多其他属性和 2. 我需要编写一个极简构造函数,并且害怕我会在代码的其他地方错误地使用它)。
我原以为operator== 重载会使其工作。为什么它不起作用?有没有不强制我用attribute_1 = elem 创建X 实例的解决方案?
【问题讨论】:
-
你不能使用 lambda。您需要一个具有两个重载
operator()的类,一个采用X和int,另一个采用int和X。您需要能够在两个方向上将elem与实际向量元素进行比较。或者,构造一个X的实例,将attribute_1设置为elem,并将其传递给std::binary_search -
不清楚为什么您期望
operator==会有所作为。谁应该使用它,以及如何使用它?期望它如何提供帮助?反正std::binary_search实际上并没有使用它。
标签: c++ compiler-errors compilation find binary-search