Получить последний / недавно добавленный элемент в std :: set - PullRequest
1 голос
/ 08 марта 2010

можете ли вы получить последний или недавно добавленный элемент в std :: set? например, скажем, если цикл выполняется для сбора элементов для заполнения в std :: set.

если при первом запуске набор был,

[0] "A"
[1] "B"
[2] "D"

и при втором запуске набор становится

[0] "A"
[1] "B"
[2] "C"
[3] "D"

Как бы вы проверили, является ли 'C' новым добавленным элементом?

Ответы [ 4 ]

12 голосов
/ 08 марта 2010

set::insert возвращает итератор для вновь вставленного элемента. Держитесь за этот итератор, если вы заинтересованы в этом элементе.

5 голосов
/ 08 марта 2010

Если у вас все еще есть старый набор, вычислите set_difference между ними.

В противном случае вы не можете. std::set не сохраняет никакой информации о том, когда элемент вставлен. Используйте std::vector (и вставляйте элементы только push_back), если вам нужно сохранить эту информацию.

0 голосов
/ 08 марта 2010

ИМХО, проще всего было бы сохранить последнее вставленное значение в переменной, см. Шаблон проектирования "Сувенир". Другой способ - использовать другую структуру данных - возможно, какой-то стек.

0 голосов
/ 08 марта 2010
Наборы

отличаются от списков и векторов тем, что они неупорядочены. Добавление объекта к набору поместит его где-то в наборе, но не обязательно в конце.

см. cplusplus / set для получения дополнительной информации о том, как набор хранит свою информацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...