What is the difference in getting a value through aMap[key] and aMap.at(key) in C++?
            Asked
            
        
        
            Active
            
        
            Viewed 1.4k times
        
    28
            
            
         
    
    
        Ruggero Turra
        
- 16,929
- 16
- 85
- 141
 
    
    
        unj2
        
- 52,135
- 87
- 247
- 375
2 Answers
44
            
            
        If you access a key using the indexing operator [] that is not currently a part of a map, then it automatically adds a key for you. This is a huge caveat, and take this into consideration. For this reason, I prefer using the indexing operator [] for setting, and .find() / .at() for lookup.
Another advantage of using .at() over [] is the fact that it can operate on a const std::map, whereas [] won't.
 
    
    
        Richard J. Ross III
        
- 55,009
- 24
- 135
- 201
25
            In C++11 map::at exists (who knew?).
It throws an exception if the key doesn't exist, find returns aMap.end() if the element doesn't exist, and operator[] value-initializes a new value for the corresponding key if no value exists there.
 
    
    
        Luchian Grigore
        
- 253,575
- 64
- 457
- 625
- 
                    1@KerrekSB (since C++11) didn't know that though. – Luchian Grigore May 30 '12 at 17:50