【发布时间】:2019-05-28 15:16:52
【问题描述】:
在模板函数中,std::vector 应该被排序。 T 可以是简单类型或 std::pair 例如,
std::vector<double> or
std::vector<std::pair<int,Something> >
当 T 是一对时,只比较第一个元素。如何实现这两种情况的比较器?
我试过了:
template<typename T>
inline bool smaller(const T& a,const T& b)
{
return a<b;
}
template<typename T,typename S>
inline bool smaller(
const std::pair<T,S>& a,
const std::pair<T,S>& b
)
{
return a.first<b.first;
}
template<typename T> inline void function(std::vector<T >& vVec)
{
...bla...
sort(vVec.begin(),vVec.end(),smaller<T>);
...bla...
}
但它不能以这种方式工作。我也尝试过专门化,但找不到合适的语法来专门化 small() 函数。
【问题讨论】:
-
你试过
sort(vVec)吗? -
@Damien, sort(vVec.begin(),vVec.end()) 也会比较该对的第二个元素。这在应用程序中不是必需的,它需要一个 operator
-
没有必要并不意味着它会成为问题,当然前提是您提到的第二个元素定义了运算符
<。