-2 -> 'A' -1 -> 'A' 0 -> 'A' 1 -> 'B' 2 -> 'B' 3 -> 'A' 4 -> 'A' 5 -> 'A'
<pre>#include <iostream> #include <map> class interval_map { friend void IntervalMapTest(); V m_valBegin; typedef std::map<K,V> m_map; public: // constructor associates whole range of K with val interval_map(V const& val) : m_valBegin(val) {} // Assign value val to interval [keyBegin, keyEnd). // Overwrite previous values in this interval. // Conforming to the C++ Standard Library conventions, the interval // includes keyBegin, but excludes keyEnd. // If !( keyBegin < keyEnd ), this designates an empty interval, // and assign must do nothing. void assign( K const& keyBegin, K const& keyEnd, V const& val ) { for( auto it = m_map.find( keyBegin ); * it != keyEnd; ++it ) { * it = val; } } // look-up of the value associated with key V const& operator[]( K const& key ) const { auto it=m_map.upper_bound(key); if(it==m_map.begin()) { return m_valBegin; } else { return (--it)->second; } } }; int main() { m_map map; m_map::iterator mpIter; int keyEnd, keyBegin; int count; // keep track of values with a std::set std::set<std::string> values; for(count = 0; count < 3; count++) { cin >> key; cin >> value; auto found = map.find(key); if(found != map.end()) // key already in map continue; // don't add it again // now try to add it to the set // only add to the map if its value is not already in the set if(values.insert(value).second) map.insert(std::make_pair(key, value)); } return 0; }
std::map
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)