wc-list.cpp (list data structure): find/search O(n) insert O(n) to do the find erase O(n) to do the find wc-map.cpp (map data structure): find/search O(log n) insert O(log n) erase O(log n) For map data structures, we can use any key data type, as long as there's an ordering defined (i.e. operator< must be defined). Once a key and its value are entered in the map, the key cannot be changed (we can erase and re-add). There are no duplicate keys. Keys "THE" and "the" are different. So, to normalize this data, convert to lowercase beforehand.... Maps rely on the pair<> data structure. The operator[] function will either find the given key/value OR will add the given key/value pair. If you want to just lookup a key without adding it to the map, the operator[] is NOT going to work....it always finds or adds. To just lookup a key to see if it's there or not, use find(): words.find( "juniper" ); returns a map iterator map< Student, Grid > m1; We can use Student as the key as long as we have operator< defined on Student. map< Student, double > m2; Class Student has a vector as one of its member variables. Student s; // ... fills in the name, grades for s m2[s] = s.get_gpa(); // add // ... change grades for s m2[s] = s.get_gpa(); // update