jprunier wrote:

Hi

I isolated this code which gives me odd results and I am not sure to

understand why. Basically I declared "positions" as a map that I am using to

store pairs of integers. The key used for the map is an integer as well.

When I access the values of a pair by using a "normal" integer as an index

to access the elements positions contains, it works fine. If I use an

integer that I created using the random() function, then the first value

which is return for the pair is this index number and the second is 0.

More practically

int a = 1001;

cout << positions[a].first << " " << positions[a].second << endl; //

will return 1 1 which is correct

int r = (int)(( random() / ( float ) RAND_MAX ) * 1000); // let's say r

= 843

cout << positions[r].first << " " << positions[r].second << endl; //

will return 843 0

Lets see:

What is stored in the map at the key of 843?

You stored with

positions[ j * width + i ] = pair<int, int>(i, j);

where width is 1000. So what values are there for i and j such that

j * 1000 + i equals 843?

It turns out that j has to be 0 and i has to be 843.

Thus at map key 843 the pair< 843, 0 > is stored. And that is

exactly what you get from the map.

Seems the problem is with your math and not with the map.

--

Karl Heinz Buchegger

kb******@gascad.at