Сразу два вопроса.Как к каждому элементу(int) set прибавить другое значение(тоже int)? И как добавить наименьший элемент в set в его конец?

То есть у меня есть set ,там например 5 целочисленных значений Мне нужно к каждому элементу прибавить еще число,то есть увеличить его на x И второй вопрос:Допустим в set 5 элементов от 1 до 5 Как мне добавить 1 в конец ,если он автоматически сортирует коллекцию? Помогите пожалуйста,не могу разобраться


Ответы (1 шт):

Автор решения: Harry

Решительно невозможно менять элементы во множестве. Потому они и объявлены как const.

Они располагаются упорядоченно, и тут врываетесь вы и хотите превратить, скажем,

1 2 3 4 5

в

1 8 3 12 5

Все, элементы находятся в неупорядоченном состоянии... Вы можете возразить, что не собираетесь нарушать упорядоченность - но откуда об этом знать компилятору?

Так что разрешенный способ один - получить элемент, изменить, добавить во множество, старый удалить...

Тот же ответ и на второй вопрос - никак. Потому что порядок элементов во множестве устанавливается самим множеством. Используйте в таком случае что-то другое - vector, например.

P.S. для кулхацкеров...
Конечно, можно пойти на нарушения типа

set<int> s = { 5,4,3,2,1};
for(int i: s) cout << i << " "; cout << endl;
for(const int& i: s) if (i%2 == 0) ((int&)i)+=5;
for(int i: s) cout << i << " "; cout << endl;

и они могут даже сработать... Но это очень нездоровое занятие - нарушать инвариант класса. Как себя после этого поведет класс - проблематично, например, в этом же примере вы видите, что получается множество с двумя одинаковыми элементами, чего быть не должно...

→ Ссылка