Стереть указатель на двух картах - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть две карты.Ключи двух карт одинаковы.Сопоставленное значение второго является указателем, который указывает на сопоставленное значение первого.Когда я стираю элемент на первой карте, указатель на второй карте не исчезает автоматически.Я должен сначала стереть вторую карту, а затем стереть первую.

// 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;
  1. Что-нибудь в C ++ может упростить этот код?Если элемент на первой карте удален, соответствующий элемент на второй карте также автоматически стирается.
  2. Если я стираю элемент на второй карте, память указателя свободна или нет?Должен ли я использовать std::share_ptr в этом случае?

Спасибо!

...