使用 make_pair 定义两个unordered_map 存储指针数据 删除一个中的数据 另一个会不会报错
时间: 2024-02-23 13:59:01 浏览: 111
C++中的哈希容器unordered_map使用示例
使用 `make_pair` 定义两个 `unordered_map` 存储指针数据,删除一个中的数据,另一个不会报错,但是可能会出现悬空指针的情况,因为删除了一个指针数据之后,另一个 `unordered_map` 中的指针数据仍然指向原来的地址,但是这个地址中的数据已经被删除了。因此,建议使用智能指针等 RAII 技术来管理指针,避免出现悬空指针的情况。具体实现可以参考以下代码:
```cpp
#include <iostream>
#include <unordered_map>
#include <memory>
using namespace std;
int main() {
unordered_map<string, shared_ptr<int>> map1;
unordered_map<string, shared_ptr<int>> map2;
// 向 map1 和 map2 中添加指针数据
shared_ptr<int> p(new int(1));
map1.insert(make_pair("a", p));
map2.insert(make_pair("a", p));
// 删除 map1 中的数据
map1.erase("a");
// 查看 map1 和 map2 中的数据
cout << "map1: ";
for (auto it = map1.begin(); it != map1.end(); ++it) {
cout << it->first << " " << *(it->second) << endl;
}
cout << "map2: ";
for (auto it = map2.begin(); it != map2.end(); ++it) {
cout << it->first << " " << *(it->second) << endl;
}
return 0;
}
```
输出结果为:
```
map1:
map2: a 1
```
可以看到,删除了 `map1` 中的指针数据后,`map2` 中的指针数据仍然指向原来的地址,但是这个地址中的数据已经被删除了。
阅读全文