结合equal_range我使用与bind2nd和binary_function
class MultiValuedComparator
{
public:
item a;
item b;
MultiValuedComparator(item c, item d)
{
a = c;
b = d;
}
};
因为我有项的副本的
class Thing
{
public:
item a;
item b;
other data;
};
vector<Thing> Things;
一个有序集合,项目B(而不是其他的数据),我想获取匹配项目a和项目b的那些数据结构的范围。该集合仅按项目a排序。
我以为equal_range是一个合适的方法来做到这一点。因为我需要匹配从binary_function继承的多个项目。
struct RangeByA : public std::binary_function<Thing, MultiValuedComparator>
{
bool operator()(const Thing &left, const MultiValuedComparator &right)
{
return left.a == right.a && left.b == right.b;
}
}
我不知道如何编写equal_range函数,所以它这样做。我想:
void somefunction()
{
typedef pair<vector<Thing>::iterator,
vector<Thing>::iterator> startEndIterPair;
MultiValuedComparator mvc(1, 2);
startEndIterPair p = equal_range
(
Things.start(),
Things.end(),
std::bind2nd(RangeByA, mvc)
);
}
但是这个代码不抱怨比赛为“运营商<”在“__middle .__ gnu_cxx :: __ normal_iterator ..等在调用equal_range
我怎样写这个如此equal_range会工作?我不知道在哪里放置重载的操作符。 RangeByA似乎不接受它。
什么MultiValuedComparator做(或u想要它做)? – YeenFei 2010-02-25 02:49:12
YeenFei:它只是包含我想要在向量中搜索的值,作为我的函子的一部分。 –
jjacksonRIAB
2010-02-25 03:24:48
它似乎没有引起问题,但它应该是'std :: binary_function'。 'binary_function'需要三个模板参数。 –
2010-02-25 06:05:41