使用 std::sort 对向量进行排序

Sorting a Vector with std::sort

本文关键字:向量 排序 std sort 使用      更新时间:2023-10-16

我得到了一个包含对的向量。我的对有模板参数。

std::vector<std::pair<T1, T2> > myVector;

我想按对第二个数据标签对 myVector 进行排序,因此按"值"(T2),而不是"键"(T1)。我在这里看到我可以使用这种甜蜜的方法:

std::sort(myVector.begin(), myVector.end(), mySortingFunc);

这是我的排序:

bool mySortingFunc (std::pair<T1, T2> pair1,   std::pair<T1, T2> pair2){ 
     return (pair1.second<pair2.second); 
}

而且它没有编译,给我扔了 10 公里长的错误。(我使用 G++)任何建议我应该怎么做?

  • E D I T:

实际代码:

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现在可以工作了。

如果函数通过常量引用接受参数,那就太好了:

static bool sortFunc(std::pair<T1,T2> const& p1,std::pair<T1,T2> const& p2) 
{ 
    return p1.second < p2.second; 
}

希望有帮助。