I'm assuming this is a 2D board?
I would ask yourself if the container you are thinking of is the right container for the job. What are its advantages and what are its disadvantages? If you figure this out and write it down before you write any code you will probably save yourself a lot of rework.
If it were me, and it isn't, I would use an array. You said the board is dynamic. How dynamic? Does it change frame to frame or does it change slowly? You could create a fixed size array on the heap that would handle many changes. Once that board was exhausted you could then allocate another 'chunk' for the board. In this manner you would only be re-creating and re-allocating every so often as the board gets filled up. I would not do this every time the array size changes.
So to start out you could init a 64x64 array. When that gets filled up you could then allocate a 128x128 array and copy the 64x64 into half of the 128x128. You could also create lists of arrays linked by pointers. This would mean the board consisted of a tree of 64x64 arrays. Each array would have 8 pointers to other arrays.
You could also use an array of 8 BoardSection pointers in the struct since you know each 'board section' could have 8 neighbors.
unsigned int *pArray;
unsigned int numRows;
unsigned int numColumns;
In the end there are many things you could do but since I do not know enough of the requirements I can't really advise you which way to go.