tags:

views:

129

answers:

2

In my header file, I'm declaring a map like so:

std::map<LPD3DXSPRITE, LPDIRECT3DTEXTURE9> sprites;

In my C++ file, I am trying to insert like so:

sprites.insert(sprite, texture);

The types I am passing to sprites.insert are correct. Why can I not insert this way? What is the proper way to insert? When I do this, the error I get is like this (snipped):

error C2664: 'std::_Tree<_Traits>::iterator std::_Tree<_Traits>::insert(std::_Tree<_Traits>::iterator,const std::pair<_Ty1,_Ty2> &)' : cannot convert parameter 1 from 'LPD3DXSPRITE' to 'std::_Tree<_Traits>::iterator'

+10  A: 

You need to wrap your key and value in an std::pair object:

sprites.insert(std::make_pair(sprite, texture));

This is because std::map is a Pair Associative Container. The value_type of std::map<K,V> is std::pair<const K,V>.

Charles Salvia
+2  A: 

Alternatively, you could use operator[]. For std::map, this will autovivify for you. Depending on what you are doing, it may make calling std::map::insert unnecessary.

s1n
`insert` will check if the value already exists in `map`, `operator[]` sets the value for key without checking so it depends on what functionality you need
stefanB