вставка элемента в отсортированный вектор и сохранение отсортированных элементов

Итак, у меня есть вектор, и я хочу, чтобы элементы были отсортированы в любое время. Как я должен вставлять элемент в этот вектор и сохранять элементы отсортированными, когда я их вытаскиваю. Я заглянул в 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 ответов


чтобы ваш вектор был отсортирован все время, вы всегда должны вставлять новые элементы в правильное положение. Поскольку вы хотите всплывать элементы в порядке возрастания, а вектор предоставляет только метод 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
}