0
我有QMap
存儲對象,我想存儲指向這些對象的指針進行一些外部處理。在從地圖插入/刪除一些值後,指向該對象的指針是否仍然有效?爲了說明:在地圖中插入更多元素之後,指向QMap中元素的指針是否仍然有效?
QMap <QString, QString> map;
map.insert("one", "one");
map.insert("two", "two");
map.insert("three", "three");
QString *pointer = &map["one"];
qDebug()<<*pointer;
map.insert("aaa", "aaa");
map.insert("bbb", "bbb");
qDebug()<<*pointer;
map.insert("zzz", "zzz");
map.insert("xxx", "xxx");
qDebug()<<*pointer;
能夠保證所有的pointer
將任意數量的插入/缺失後指向完全相同的對象(這個對象沒有被去除,當然考慮)
或者,我應該考慮存儲指針而不是對象?
地圖中的值是按值存儲的,即使在這種情況下,它意味着指針(它指向的地址)按值存儲[例如](https://stackoverflow.com/questions/14340672/invalidate- pointer-values-inside-a-qmap) –
你有沒有考慮過使用'std :: map'呢?標準容器的失效規則已經過詳細記錄,並且通常可以理解。 –
[此鏈接](http://doc.qt.io/qt-5/qmap-iterator.html#details)表示在'QMap'中插入不會使迭代器失效。 *「如果向地圖添加項目,現有迭代器將保持有效。」*很可能指向現有元素的指針也被保留,但沒有明確說明。 –