I'm sure this is a brain fart, but I'm missing something and a google search doesn't seem to be bringing up anything.
struct item { int a; int b; int c; }; typedef item *itemcatalog; So 'itemcatalog' is simply an array of 'item's.
const item items[] = {{1,2,3},{4,5,6}}; const item *collection = items; // OK const itemcatalog catalog = items; // "item const *" is incompatible with "itemcatalog" The idea is that "itemcatalog" is more descriptive and shows that an array of items is expected rather than just a pointer to a single item.
EDIT: fix typo.
itemcatalog t = items;oritemcatalog collection2 = items;std::map<X, <std:vector<Y> >or something harder to "get right", but in this case, no.