Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Removes an element or a range of elements in a map from specified positions or removes elements that match a specified key.
iterator erase(
   iterator _Where
);
iterator erase(
   iterator _First,
   iterator _Last
);
size_type erase(
   const key_type& _Key
);
Parameters
- _Where 
 Position of the element to be removed from the map.
- _First 
 Position of the first element removed from the map.
- _Last 
 Position just beyond the last element removed from the map.
- _Key 
 The key value of the elements to be removed from the map.
Return Value
For the first two methods, a bidirectional iterator that designates the first element remaining beyond the elements removed, or a pointer to the end of the map if no such element exists.
Note
This return type does not conform to the C++ standard.
For the third method, 1 if an element is removed from the map; 0 if no element is removed.
Remarks
The following example demonstrates the three overloads of map::erase.
   map<int, int> m;
    map<int, int>::iterator iter;
    // {0, 100} {1, 101} ... {5, 105} 
    for(int i = 0; i < 6; i+)
    {
        m[i] = i + 100;
    }
    // by iterator: erase the first element {0, 100}
    iter = m.begin();
    m.erase(iter);
    cout << "After erasing:" << endl;
    for(iter = m.begin(); iter != m.end(); iter+)
    {
        cout << iter->first << ", " << iter->second << endl;
    }
    // by range: erase all elements but first and last
    map<int, int>::iterator iter1 = ++m.begin();
    map<int, int>::iterator iter2 = --m.end();
    m.erase(iter1, iter2);
    cout << endl << "After erasing:" << endl;
    for(iter = m.begin(); iter != m.end(); iter+)
    {
        cout << iter->first << ", " << iter->second << endl;
    }
    // by key: erase {1, 101}
    m.erase(1);
    cout << endl << "After erasing:" << endl;
    for(iter = m.begin(); iter != m.end(); iter+)
    {
        cout << iter->first << ", " << iter->second << endl;
    }
    // Output: 
    // -------------------------- 
    // After erasing the first element: 
    // 1, 101 
    // 2, 102 
    // 3, 103 
    // 4, 104 
    // 5, 105 
    // 
    // After erasing: 
    // 1, 101 
    // 5, 105 
    // 
    // After erasing: 
    // 5, 105
When looping, this method throws an out_of_range exception if you do not assign the return value of the erase (the next valid iterator) to the looping iterator.
The following example demonstrates the correct usage of map::erase in a loop.
// when you call m.erase, iter becomes undefined 
    // you must assign the return value (the next valid iterator) to iter to continue looping 
    for(iter = m.begin(); iter != m.end(); )
    {
        // simply using m.erase(iter) causes the application to throw 
        // an unhandled exception on the next loop iteration
        iter = m.erase(iter);
    }
    if(m.empty())
    {
        cout << "m is empty" << endl;
    }
    // Output: 
    // -------------------------- 
    // m is empty
Requirements
Header: <map>
Namespace: std
See Also
Reference
map::max_size, map::clear, map::erase, and map::size
Other Resources
Change History
| Date | History | Reason | 
|---|---|---|
| July 2009 | Cleaned up topic; rewrote code examples; added section on looping. | Customer feedback. |