У меня есть глобальная переменная:C++ 11: станд :: unordered_map <Int, станд :: стек <int>> получать значения из карты без копирования несколько раз
std::unordered_map<int, std::stack<int>> intTable;
Чтобы добавить к этому, я это делаю В настоящее время (я видел C++ 11 списков инициализатора, но я не уверен, если я ударю этот Visual C++ 11 2013 ошибка ->http://connect.microsoft.com/VisualStudio/feedback/details/807966/initializer-lists-with-nested-dynamically-allocated-objects-causes-memory-leak)
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], не копируя ее?
Кроме того, если вы хотите удалить без повторного поиска, используйте 'find' для получения итератора на карте. – Arkadiy
Я понятия не имел, что могу передать итератор, чтобы удалить ключ! – halivingston
Если у меня есть итератор, могу ли я также использовать его для получения значения с карты? В настоящее время я всегда делаю .find() .. тогда, если он существует, я извлекаю ключ, выполняя mymap [key] ... – halivingston