Согласно std::map::insert
documentation:
проверки работы вставки, имеет ли каждый вставлен элемент с ключа, эквивалентную одному из элемента уже в контейнере, и , если это так, то элемент не вставлен, возвращая итератор на этот существующий элемент
так что вы можете использовать insert
для извлечения итератора в уже существующий элемент.
Поскольку были и другие варианты, включая упомянутый find
и оператор индекса я предполагаю, что это должно подвести его, и вы можете выбрать в зависимости от ваших потребностей:
#include <map>
#include <cstdlib>
#include <iostream>
struct Dummy
{
int nDummyValue;
};
int main(int argc, char** argv)
{
std::map<int, Dummy> Map;
Dummy DummyInstance = { 1 };
std::pair<std::map<int, Dummy>::iterator, bool> InsertionResult = Map.insert(std::pair<int, Dummy>(1, DummyInstance)); // Inserts {1, {1}}
InsertionResult.first->second.nDummyValue = 2; // Sets {1, {1} to {1, {2}}
DummyInstance.nDummyValue = 5;
Map[5] = DummyInstance; // Adds {5, {5}}
std::map<int, Dummy>::iterator MapIterator;
MapIterator = Map.find(4);
if(MapIterator != Map.end())
MapIterator->second.nDummyValue = 4; // Is not run because there is no element with key 5
MapIterator = Map.find(5);
if(MapIterator != Map.end())
MapIterator->second.nDummyValue = 10; // Changes {5, {5}} to {5, {10}}
for(std::map<int, Dummy>::iterator Iterator = Map.begin(); Iterator != Map.end(); ++Iterator)
std::cout << Iterator->first << " : " << Iterator->second.nDummyValue << std::endl;
return EXIT_SUCCESS;
}
Почему вы выбрали 'зЬй: map'? – Mahesh
Как мои структуры данных были разработаны, мне придется использовать std :: map – user2812535
Вы можете сделать это с помощью одной строки: 'mymap [1] .var2 = 2;'. Этот код обновит 'var2' для' temp structure', связанных с ключом 1. Если этот ключ еще не существует, он будет вставлен в качестве значения по умолчанию для карты, а затем 'var2' будет установить сразу. – renzo