Я следующий код -:Изменение элементов в станд :: набор
int main()
{
set<string> s;
s.insert("asas");
s.insert("abab");
for (auto item : s)
{
cout << item << "\n";
reverse(item.begin(), item.end());
}
cout << "\n";
for (auto item : s)
{
cout << item << "\n";
}
}
Выход -:
abab
asas
abab
asas
Элементы множества не модифицируется вообще функцией reverse()
.
Я подозреваю, что элементы внутри набора не могут быть изменены вообще. Но, если это так, почему компилятор не дает ошибку в первую очередь?
Я использую TDM-GCC 4.9.2 с -std=c++14
флагом на Windows, на основе цикла 7.
Вы работаете с копиями элементов, оригиналы в 'set' не изменяются. Используйте итераторы, чтобы манипулировать ими напрямую. –
Элементы в ассортименте сортируются в определенном порядке. Вот почему вставка и удаление всегда относительно быстро, независимо от того, насколько большой набор. Вы можете указать желаемый заказ, но вы не можете его изменить. Если порядок пунктов имеет значение для вас, используйте последовательный контейнер, такой как вектор. – nwp