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

inserting element to a sorted vector and keeping elements sorted

本文关键字:排序 元素 插入 向量      更新时间:2023-10-16

所以我有一个向量,我希望元素始终排序。我应该如何将一个元素插入到该向量中,并在弹出元素时保持它们的排序。然而,我查看了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函数使用该比较函子。有没有一种方法可以取比较函子的对立面?

要始终对向量进行排序,您应该始终将新元素插入正确的位置。由于您想按升序弹出元素,而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
}