C++ stl算法中不同类型的严格弱序

C++ stl算法中不同类型的严格弱序,c++,stl,c++11,C++,Stl,C++11,我有一个类定义了与其他类型的严格弱排序,我想在该类的容器上使用基于比较的算法(例如std::upper_-bound) 该标准定义容器的前向迭代器值类型应为可比较类型,因此不编译以下内容: template<typename T> class Foo { public: bool operator<(const T& _val) { return val < _val; } //operator T() { return val; } // unc

我有一个类定义了与其他类型的严格弱排序,我想在该类的容器上使用基于比较的算法(例如std::upper_-bound)

该标准定义容器的前向迭代器值类型应为可比较类型,因此不编译以下内容:

template<typename T>
class Foo {
public:
    bool operator<(const T& _val) { return val < _val; }
    //operator T() { return val; } // uncommenting this solves the problem
private:
    T val;
};

void bar() {
    vector<Foo<int>> foos(10);
    auto i_lb = std::lower_bound(foos.begin(), foos.end(), 17); // compiles and works, though I don't know why
    auto i_eq = std::equal_range(foos.begin(), foos.end(), 17); // error! not convertible to int
}
模板
福班{
公众:

布尔运算符相等的_范围必须比较两种方式的值,以确定它们是否相等


(!)时,一个值
A
,被认为与另一个值
b
(我知道运算符<对于相等的范围或上限是不够的,但我不知道它是如何与下限算法匹配的。如果我定义一个函数的两个重载comp(Foo,t)和comp(t,Foo),会怎么样.该函数是否适用于第二版本的算法?下界只需以一种方式比较元素,如
while(a