@ mlimber уже дал одно объяснение.
Я бы объяснил это немного по-другому.Проще говоря, это способ взять что-то действительно простое:
std::set<Cat> cats;
cats.insert(morris);
и сделать его медленнее (линейным, а не логарифмическим) и значительно труднее читать или понимать.
Редактировать: Справедливо, Я полагаю, мне следует добавить, что есть несколько причин, по которым вы могли бы захотеть сделать что-то подобное.Например, если вам действительно нужно знать порядок, в котором Cat
были добавлены в коллекцию, сохранение исходного порядка может иметь некоторый смысл.Аналогичным образом, если вы обычно используете коллекцию таким образом, чтобы извлекать выгоду из-за того, что они непрерывны в памяти, и только редко добавляет новый элемент, возможно, имеет смысл сохранитьоднако данные в vector
, чем set
.
A set
, предназначены для выполнения точно того, что здесь делается, поэтому set
является очевидным выбором(отсутствуют веские причины использовать vector
, которые просто не видны на том, что вы показали).