c++ - 插入新键时会更改现有键值的地址吗?

标签 c++ dictionary std stdmap unordered

在我的代码中,将在 std::map 中插入或删除,但不会更改现有键的值。 插入/删除新键时会更改现有键值的地址吗?

int main()
{

    std::map<int,int> m;
    for(int i(0);i<100000;i++){
        m[i];
        std::cout<< &m[0]<<std::endl;
    }

    return 0;
}

结果总是一样的...所以它不会对旧 key 产生影响? 顺便问一下,unordered_map 怎么样?

最佳答案

插入或删除其他元素时,现有元素的地址不会更改。换句话说,除非删除该特定元素,否则对元素的引用不会失效。

这对于所有基于节点的容器都是如此,其中包括关联容器(映射、集合、无序变体、它们的多个变体)和链接列表。对于基于数组的双端队列、 vector 或字符串来说,情况并非如此。

无序关联容器的迭代器在插入时可能会因重新散列而失效;这不会影响地址。

关于c++ - 插入新键时会更改现有键值的地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61771352/

相关文章:

c++ - 重新分配 "random"崩溃

c++ - 从 QML 索引访问列表

python - 将 Python 字典转换为类 C 结构

arrays - swift 3 : Trying to parse JSON but keep getting type issues

c++ - 使用比较运算符将 std::string 作为 std::map 中的键

c++ - std::set 和 boost::shared_ptr 唯一键识别问题

C++: vector 容器和 <algorithm> std::find

c++ - C++中多线程冲突的可能性

python - 确保县边界字典中的交换性/互惠性

c++ - 将元素传递给 std::sort 中的比较函数的顺序背后的逻辑是什么?