I assume the number of channels tends to be (much?) less than the number of images you're looking at?  If not, the map the other way around may be more efficient.  If they're about the same it won't matter.

If the map is the correct way around, it might be cheaper to build a map of filenames that exist rather than rely on the CFileItemList stuff to keep each compare in the map down to something that actually differs (only the filename bit) rather than having the full path (the first 80% of which is the same for every item).  You could ignore extension at the same time.  i.e. a linear run through the CFileItemList to build the map of filenames, then iterate over your channels checking your 5 channel name possibilities.