C ++ 11:std :: unordered_map <int,std :: stack <int =“”>&gt;从map中获取值而不复制多次</int,>

时间:2014-01-03 17:54:42

标签: c++ c++11 vector stack unordered-map

我有一个全局变量:

std::unordered_map<int, std::stack<int>> intTable;

要添加到此,我目前正在执行此操作:(我已经看过C ++ 11初始化列表,但我不确定是否会遇到此Visual C ++ 11 2013错误 - &gt; {{3} })

    std::stack<int> s;
    s.push(10);

然后我做

    intTable[integerKey] = s;

然后我需要有时添加到堆栈中,并检查其最高值,如果它大于值,我需要弹出它并从地图中删除密钥:

    intTable[integerKey].push(20);

    if (intTable[integerKey].top() >= someIntegerValue)
    {
       intTable[integerKey].pop();

       if (intTable[integerKey]->size() == 0)
       {
          intTable.erase(integerKey);
       }
    }

我的问题是有更好的方法吗?例如,我看到的一个低效率是我多次索引到地图中。有可能避免这种情况吗?如何在不复制的情况下存储对intTable [integerKey]的引用?

3 个答案:

答案 0 :(得分:2)

访问时,使用默认构造函数初始化地图成员。

std::stack<int> &localReference = intTable[integerKey];

将分配堆栈(如果它不存在),并返回对堆栈的引用。

答案 1 :(得分:1)

你可以做到

std::stack<int> &localReference = intTable[integerKey];

在函数开始之后,访问本地引用,虽然编译器很可能在本地函数的范围内优化远离intTable [integerKey],因此它可能与实际汇编代码没有区别。

答案 2 :(得分:0)

按键无序地图访问非常快。您可以参考该元素并对其进行处理,但除此之外没关系。