A POSITION is like an iterator for a collection - its not synomous with an integer. The CTypedPtrMap will be keyed by what ever you templateized it on - looking at this a string. So you can find your CContact based on a CSring easily, which is the key into the map. How did you insert into the map? Did you insert all the keys into m_screenName, then insert each CContact into the map based on the key? If so, you can do a GetText on the combo to get the text for item iIndex, then use that look up in the map. CString str; str = m_screenName.GetText(iIndex); CContact* p = NULL; BOOL b = m_Contacts.Lookup(str, p); etc If not, the only thing u can do is to advance around the map until u hit the position at iIndex: POSTION pos = m_Contacts.GetStartPosition(); int nElement = 0; while(pos != NULL && nElement++ <= iIndex) { pos = m_Contacts.GetNextAssoc(pos, strKey, pContact); } You get the idea - iterate around the map until you get to element iIndex.