У меня есть две карты.Ключи двух карт одинаковы.Сопоставленное значение второго является указателем, который указывает на сопоставленное значение первого.Когда я стираю элемент на первой карте, указатель на второй карте не исчезает автоматически.Я должен сначала стереть вторую карту, а затем стереть первую.
// two maps
map<int, int> a;
map<int, int*> pt_a;
int N = 5;
for (size_t i = 0; i < N; i++)
{
a.insert({ i,2 * i });
pt_a.insert({ i,&(a[i]) });
}
// erase the first element of a
a.erase(a.begin());
// after erase
for (auto& i : a) cout << i.first << " " << &(i.second) << endl;
cout << endl;
for (auto& i : pt_a) cout << i.first << " " << i.second << endl;
- Что-нибудь в C ++ может упростить этот код?Если элемент на первой карте удален, соответствующий элемент на второй карте также автоматически стирается.
- Если я стираю элемент на второй карте, память указателя свободна или нет?Должен ли я использовать
std::share_ptr
в этом случае?
Спасибо!