Есть ли отсортированный контейнер в STL?
Я имею в виду следующее: у меня есть std::vector<Foo>
, где Foo
- это пользовательский класс. У меня также есть какой-то компаратор, который будет сравнивать поля класса Foo
.
Теперь, где-то в моем коде я делаю:
std::sort( myvec.begin(), myvec.end(), comparator );
который будет сортировать вектор в соответствии с правилами, которые я определил в компараторе.
Теперь я хочу вставить элемент класса Foo
в этот вектор. Если бы я мог, я хотел бы просто написать:
mysortedvector.push_back( Foo() );
и то, что случилось бы, - то, что вектор поместит этот новый элемент согласно компаратору на его место.
Вместо этого прямо сейчас я должен написать:
myvec.push_back( Foo() );
std::sort( myvec.begin(), myvec.end(), comparator );
это просто пустая трата времени, поскольку вектор уже отсортирован, и все, что мне нужно, это правильно разместить новый элемент.
Теперь, из-за характера моей программы, я не могу использовать std::map<>
как у меня нет пар ключ/значение, просто простой вектор.
Если я использую stl::list
, мне снова нужно вызывать sort после каждой вставки.