That would be fine, just place the vector inside whichever class you're gonna mess with - having it outside is a bit silly really (see OnExecute or whatever it is that takes a copy of the vector then passes through it etc. etc. - that should all be hidden away in the class ideally).
I'll let you make your own mind up regarding the utility of the existing ActionDescriptor class..
As for the numeric thing, nothing jumps out as being immediately difficult with it handled by the same class using the same vector (just store the id as a string and check for that in a routine that specifically asks for the next control to jump to - GetNextControlId() I think it is?)
Cheers,
Jonathan