- SamReadGroupIterator rgIter = Begin();
- SamReadGroupIterator rgEnd = End();
- for ( size_t i = 0 ; rgIter != rgEnd; ++rgIter, ++i ) {
- SamReadGroup& rg = (*rgIter);
- if( rg.ID == readGroupId ) {
- m_data.erase( Begin() + i );
- }
+ // skip if empty dictionary or if ID unknown
+ if ( IsEmpty() || !Contains(readGroupId) )
+ return;
+
+ // update 'lookup index' for every entry after @readGroupId
+ const size_t indexToRemove = m_lookupData[readGroupId];
+ const size_t numEntries = m_data.size();
+ for ( size_t i = indexToRemove+1; i < numEntries; ++i ) {
+ const SamReadGroup& rg = m_data.at(i);
+ --m_lookupData[rg.ID];