将元素插入到已排序的向量中并保持元素的排序

时间:2013-02-24 03:53:45

标签: c++ sorting vector insertion-sort

所以我有一个向量,我希望元素始终排序。我应该如何将元素插入到该向量中,并在弹出它们时保持元素排序。然而,我调查了std::lower_bound,这与我想要的相反。

例如,这就是我想要的:当我弹出向量中的所有元素时,它应该是: 1 2 3 4 5.这意味着向量必须将它们存储为5 4 3 2 1.如果使用下限,则向量将它们存储为1 2 3 4 5,并将其弹出为5 4 3 2 1.此外,将传递一个比较仿函数,以便lower_bound函数使用比较仿函数。有没有办法与比较函子相反?

1 个答案:

答案 0 :(得分:24)

要始终对矢量进行排序,应始终将新元素插入正确的位置。由于您希望按升序弹出元素,而vector只提供pop_back()方法,因此您应该按降序对元素进行排序。所以首先你需要找到合适的位置然后插入那里:

typedef std::vector<int> ints;

void insert( ints &cont, int value ) {
    ints::iterator it = std::lower_bound( cont.begin(), cont.end(), value, std::greater<int>() ); // find proper position in descending order
    cont.insert( it, value ); // insert before iterator it
}