У меня есть следующая структура карты: map < pair < int,int >, object* >
и я хочу вставить в него.
Как я сделал бы это, так как я пытаюсь вставить пару и объект, и я должен сделать пару из этого?
Если я создаю новое парное использование make_pair()
из пары и объекта, который я имею? Если так, Вы могли сообщить мне, как сделать это?
object * myObject = // get an object somehow
myMap.insert(std::make_pair(std::make_pair(1,2), myObject));
или
typedef map<pair<int, int>, object *> MapType;
object * myObject = // get an object somehow
myMap.insert(MapType::value_type(std::make_pair(1,2), myObject));
Есть два способа:
typedef std::map<int,Object> map_t;
map_t map;
Object obj;
std::pair<map_t::iterator, bool> result = map.insert(std::make_pair(1,obj)); // 1
map[1] = obj; // 2
Работает только если ключ еще не присутствует, итератор указывает на пару со значением ключа, а bool указывает, был ли он вставлен или нет.
Проще, но если он еще не существует, объект сначала конструируется по умолчанию, а затем присваивается, вместо того, чтобы быть построенным по копии
Если вам не нужно беспокоиться о производительности, просто выберите, хотите ли вы стереть предыдущую запись.