#cpp #stl #множества #multiset
При использовании метода erase() из мультимножества удаляются все элементы со значением параметра. Можно, конечно, класть в контейнер пару, где first - номер элемента, second - нужное значение, тогда дубликатов не будет. Но есть ли другое решение проблемы? Код: #include#include using namespace std; int main() { multiset a = {1, 1, 3}; for(int i: a) cout << i << " "; // Вывод: 1 1 3 a.erase(1); cout << "\n"; for(int i: a) cout << i << " "; // Вывод: 3 return 0; }
Ответы
Ответ 1
Работайте с итератором. Находите нужный вам элемент, вернее, ненужный :), вернее, итератор, указывающий на него - и вызывайте erase. С точки зрения multiset все значения с одним и тем же ключом совершенно неотличимы, как какие-нибудь электроны... С вашей - они вполне могут и отличаться, и тогда ваше дело - показать мультимножеству на него итератором и сказать "ату его"...Ответ 2
Если вам нужно удалить один элемент, делайте erase(find(key)) вместо erase(key). Разумеется, в варианте erase(find(key)) надо добавить проверку на успешность поиска. Однако такой способ удалит "какой-то" из эквивалентных элементов. А уж как вы предлагаете выбирать конкретный элемент для удаления и нужно ли вам его выбирать - об этом вы пока не удосужились сообщить.
Комментариев нет:
Отправить комментарий