我有一个全局变量:
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]的引用?
答案 0 :(得分:2)
访问时,使用默认构造函数初始化地图成员。
std::stack<int> &localReference = intTable[integerKey];
将分配堆栈(如果它不存在),并返回对堆栈的引用。
答案 1 :(得分:1)
你可以做到
std::stack<int> &localReference = intTable[integerKey];
在函数开始之后,访问本地引用,虽然编译器很可能在本地函数的范围内优化远离intTable [integerKey],因此它可能与实际汇编代码没有区别。
答案 2 :(得分:0)
按键无序地图访问非常快。您可以参考该元素并对其进行处理,但除此之外没关系。