假设有两个类 KeyClass and ValueClass
typedef std::map<KeyClass, ValueClass> TMyMap;
std::map要求:
1. KeyClass 实现了operator <, 或者传入一个compare,例如:typedef std:map<KeyClass, ValueClass, Compare> TMyMap
2. 不要求KeyClass是equality comparable的, http://www.sgi.com/tech/stl/AssociativeContainer.html
3. 要求ValueClass有default constructor (如果要用m[key]=value这种形式的话),因为m[key]=value实际上是等价于两步:
std::pair<TMyMap::iterator,bool> result = m.insert( TMyMap::value_type( key, ValueClass() );
result->second = value;
第一步默认构造了一个ValueClass,第二步赋值。
因此用m[key] = value插入新元素的方式效率比较低,好的方式应该是
m.insert( TMyMap::value_type( key, value );