c++ - 如何从新插入的对(到 map )返回引用对?

标签 c++ data-structures std stdmap std-pair

如何正确有效地将新插入的对中的一对返回到 map ?

inline pair<unsigned int, T> *createObj(unsigned int UID){
    static pair<unsigned int, T> ret;

    objList.insert(pair<unsigned int, T>(UID, T()));

    if (UID_Counter <= UID) 
        UID_Counter = UID+1; 
    ret = make_pair(UID, objList.find(UID)->second);
    return &ret;
}

上面返回一个要使用的对象,但是无论我在 ret 中进行更改, map 中的“真实对”都不会更改...

基本上我想要实现的是:

  1. 将新对象 Z 插入 map A
  2. ("Child"-class) 更改返回的对象 Z 中的内容
  3. 在每个更新周期中,迭代映射 A 中的对象,并使用加载到对象“A-Z”中的实际数据正在更新...

最佳答案

insert 的特定过载您正在使用的返回 std::pair<iterator, bool> 。特别是,该对的第一个成员是新插入的元素或已存在的元素的迭代器。因此:

pair<const unsigned int, T>&
createObj(unsigned int UID)
{
    auto inserted = objList.insert(pair<unsigned int, T>(UID, T()));

    if (UID_Counter <= UID) 
        UID_Counter = UID+1; 

    return *inserted.first;
}

请注意,我正在返回一个引用,您正在返回一个指针,并且键类型为 const unsigned int ,不是unsigned int 。您可以使用map_type::value_type ,也是(其中 map_type 是容器的类型)。

如果您想知道为什么您的代码不起作用,那是因为您将映射对象的拷贝存储在 ret 中。 ,因此通过您返回的指针进行的任何修改只会影响该拷贝。

关于c++ - 如何从新插入的对(到 map )返回引用对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7296731/

相关文章:

c++ - C++中的观察者设计模式

c# - 什么时候应该使用 HashSet<T> 类型?

algorithm - 找到两个顶点子集之间的最小距离

data-structures - "Get all strings with Levenshtein distance less than X"的实现方式

C++ - 刷新 std::cout 后没有得到结果

c++ - 如何在 C++ 中修改知道内存地址的对象?

c++ - 模板检测 T 是指针还是类

c++ - 使用 malloc 分配空间给 list<int> 指针不工作

c++ - "cout << cout"- 输出代表什么?

c++ - 使用 std::find() 搜索多个元素