这是我想做的。使用通用的排序容器。对于关联容器搜索键,找到通用值。对于非关联容器搜索键,找到 nullptr_t nullptr。这对于设置关联容器和非关联容器之间的交集很有用。
我有一个搜索函数,它应该将 &it 留在 std::pair 的下界,其中 i <= it->first。
template <typename Iter, typename End>
bool search (unsigned i, Iter& it, End& end) {...}
这就是我被难住的地方。 std::lower_bound 的第三个参数需要一个类型的引用。我只对寻找 it->first 的值(value)感兴趣。以前,我使用 value.second 的默认构造函数创建了一个虚拟值,但这看起来很糟糕。
std::lower_bound
template< class ForwardIt, class T, class Compare >
ForwardIt lower_bound( ForwardIt first, ForwardIt last, const T& value, Compare comp );
最佳答案
您可以将异构比较器(即接受类型不同的参数的比较器) 传递给 lower_bound
。第一个参数将来自范围中的取消引用迭代器,第二个参数将来自作为第三个参数传递给 lower_bound
的值。所以,你可以使用这样的东西:
struct Compare
{
template<typename T1, typename T2>
bool operator()(T1 const& lhs, T2 const& rhs) const
{
return lhs.first < rhs;
}
};
然后你可以这样调用lower_bound
:
lower_bound(container.begin(), container.end(), value, Compare());
关于c++ - 当我只对比较部分值感兴趣而不能为另一部分假定默认构造函数时,如何使用 std::lower_bound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26994377/