При вставке чего-либо в набор оно помещается в красно-черное дерево, чтобы отобразить порядок сортировки и помочь с вставкой уникального значения.Изменение значения после вставки нарушило бы основные функциональные возможности наборов.
Итераторы набора в документах C ++ имеют примечание
https://en.cppreference.com/w/cpp/container/set/begin
, поскольку итераторы и const_iterator являютсяконстантные итераторы (и на самом деле могут быть одного типа), невозможно изменить элементы контейнера через итератор, возвращаемый любой из этих функций-членов.
Это также означает, что вы можете изменитьдругими способами, но это не очень хорошая идея.
Контейнер списка не имеет таких ограничений и, на мой взгляд, является правильным выбором.
https://en.cppreference.com/w/cpp/container/list/begin
#include <list>
#include <iostream>
int main()
{
std::list<std::list<int>> listOfLists = {{1, 2, 3}, {6, 7, 8}};
for (auto& containedList : listOfLists)
{
containedList.push_front(2);
}
for (auto& containedList : listOfLists)
{
std::cout << "[";
for (auto& listItem : containedList) {
std::cout << listItem;
}
std::cout << "]" << std::endl;
}
return 0;
}