【问题标题】:Updating std::map with value as struct data type使用值作为结构数据类型更新 std::map
【发布时间】:2018-11-19 17:38:39
【问题描述】:

在下面的代码中,我使用 std::map&myMap 作为参考

我正在使用地图值 dataNode 来更新 start_time 和 end_time 的值,但我看到这些值没有更新,我得到了

当我打印时在 widthOfBinaryTree 中打印

0 2147483647 -2147483648

1 2147483647 -2147483648

2 2147483647 -2147483648

为什么 start_time 和 end_time 的值不会在树的每一层都更新。

class Solution {

public:

    typedef struct dataNode
    {
        int start_time =INT_MAX;
        int end_time = INT_MIN;
    };


    int widthOfBinaryTreeRecursion(TreeNode* root, int level, int sideLevel, bool left, std::map<int ,dataNode>&myMap)
    {

        if(root == nullptr)
        {
            return 0 ;
        }

        auto element = myMap[level];

        widthOfBinaryTreeRecursion(root->left , level+1 , sideLevel*2 , true ,myMap);

        if(left && sideLevel < element.start_time)
        {
            cout << "start" << " " <<element.start_time << " " << sideLevel  << " " <<root->val <<" " << level <<endl;

            element.start_time = sideLevel;
        }

        if(!left && sideLevel > element.end_time)
        {
             cout <<"end" <<" " <<  element.end_time << " " << sideLevel  << " " <<root->val <<" " << level <<endl;

              element.end_time = sideLevel;
        }

        widthOfBinaryTreeRecursion(root->right, level+1 ,sideLevel*2+1, false, myMap);

        return 0;
    }

    int widthOfBinaryTree(TreeNode* root) 
    {
        std::map<int , dataNode>myMap;

        widthOfBinaryTreeRecursion(root, 0, 1, true,myMap);

        for(auto itr : myMap)
        {
            cout << itr.first <<" " << itr.second.start_time << endl;
        }

        return 0;
    }
};

【问题讨论】:

    标签: c++11 recursion stl stdmap


    【解决方案1】:

    这会创建该值的本地副本,因此您对其所做的任何更改都不会反映在地图中:

    auto element = myMap[level];
    

    由于您打算修改存储在地图中的值,因此您应该使用auto &amp;获取共享引用:

    auto & element = myMap[level];
    

    【讨论】:

    • 谢谢@jspcal。
    猜你喜欢
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多