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