If you are building a roguelike, just have a sentinel list of entities. That is, do not try to break the level up into a 2d array of containers. Just have a ring, each entity having coordinates, and iterate through it as you need.
If you want to have an ai occupy multiple spaces, have that. Have an 'avatar' ai object own one-to-many (plotable) entities.
The mighty Jeff Lait gave me this insight in a code review. I believe he added, "premature optimisation is the root of all evil." I.e. be happy to iterate through linked lists until you are sure it is a problem.
Check out his game Smart Kobald.