16

我有一个关于对向量进行排序的问题:

std::vector<std::pair<double,Processor*>> baryProc;

这个向量已经被这些对填满了。现在我想根据对内的双精度值对向量内的对进行排序

例子:

假设我在向量中有 3 对。pair1 在前面,pair 3 在末尾。pair2 在中间:

pair1(1, proc1) 
pair2(3, proc2)
pair3(2.5, proc3)

现在我想根据双精度值对配对进行排序。所以向量内的顺序是:

pair1(1, proc1) 
pair3(2.5, proc3)
pair2(3, proc2)

我怎么能这样做?我很困惑。

4

2 回答 2

31
#include <algorithm>

int main(){

    std::vector<std::pair<double,Processor*>> baryProc;

    std::sort(baryProc.begin(),baryProc.end());
}

请注意,您不需要自定义比较器,因为 pair 的默认比较器可以满足您的需求。它首先比较第一个元素,如果它们相同,则比较该对中的第二个元素。

于 2013-08-07T20:10:20.387 回答
28

在 C++ 中,您可以使用自定义比较器函数来指定在排序时如何确定一个元素是否在另一个元素之前。在您的情况下,给定 2 对,您希望第一个元素的值较低的那个在另一个之前。您可以像这样编写比较器函数:

// This function returns true if the first pair is "less"
// than the second one according to some metric
// In this case, we say the first pair is "less" if the first element of the first pair
// is less than the first element of the second pair
bool pairCompare(const std::pair<double, Processor*>& firstElem, const std::pair<double, Processor*>& secondElem) {
  return firstElem.first < secondElem.first;

}

现在,将此函数传递给您的排序方法:

//The sort function will use your custom comparator function 
std::sort(baryProc.begin(), baryProc.end(), pairCompare);
于 2013-08-07T20:10:06.307 回答