[英]Sorting a Vector with std::sort
我有一个包含对的矢量。 我的对有模板参数。
std::vector<std::pair<T1, T2> > myVector;
我想通过对第二个数据标签对myVector进行排序,因此通过“值”(T2),而不是“密钥”(T1)。 我在这里看到我可以使用这种甜蜜的方法:
std::sort(myVector.begin(), myVector.end(), mySortingFunc);
这是我的sortFunc:
bool mySortingFunc (std::pair<T1, T2> pair1, std::pair<T1, T2> pair2){
return (pair1.second<pair2.second);
}
它没有编译,给我10公里长的错误。 (我用g ++)任何建议我应该怎么做?
实际代码:
template<typename T1, typename T2>
class OrderedMMap
{
std::vector<std::pair<T1, T2> > myVector;
public:
bool sortFunc (std::pair<T1, T2> pair1, std::pair<T1, T2> pair2) {
return (pair1.second<pair2.second);
}
void sortIt()
{
std::sort(myVector.begin(), myVector.end(), sortFunc);
}
};
sortFunc
是一个非静态成员函数。 那就是问题所在。 只能在类的对象上调用非静态成员函数; std::sort
不能为你做那件事。
简单的解决方法是使函数static
:
static bool sortFunc (std::pair<T1, T2> pair1, std::pair<T1, T2> pair2) {
return (pair1.second<pair2.second);
}
使用static
关键字,现在它变得像常规函数一样,可以在没有类实例的情况下调用,这意味着std::sort
现在可以正常工作。
如果函数接受const引用的参数会很好:
static bool sortFunc(std::pair<T1,T2> const& p1,std::pair<T1,T2> const& p2)
{
return p1.second < p2.second;
}
希望有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.