希望这是一个快速简单的问题。我是否需要bool(*)(char,char)
下面的typedef
,或者我可以使用multimap<char,char>::iterator
来使用地图mmIt
的{{1}}迭代器吗?谢谢你的帮助!
代码段:
mmap
答案 0 :(得分:2)
如果multimap<K,V,Comp>::iterator
是一个不依赖于比较器类型的其他东西的typedef,那么你可能没问题 - 但这是一个实现细节,如果它是一个真正的嵌套类型肯定会破坏。
回避它:
typedef multimap<char,int,bool(*)(char,char)> mMap;
typedef mMap::iterator mmIt;
并避免在任何地方写出整个multimap参数列表。
答案 1 :(得分:0)
虽然迭代器不需要比较函数,但是说std::map<char,int,std::less<char>>
的迭代器通常是一个完全不同于迭代器的类型,例如std::map<char,int,std::greater<char>>
,因为迭代器类型是在特定的地图类型,因此就可以了。
std::map<K,T>
实际上是std::map<K,T,std::less<K>,std::allocator<std::pair<const K,T>>>
的快捷方式。因此,如果地图的比较器与默认比较器(在您的情况下为std::less<char>
)不同,那么无论何时使用它,都需要使用它显式地实例化地图类型。
答案 2 :(得分:0)
标准允许您的代码是正确的,但它并不保证。
例如,Visual Studio 11具有所谓的SCARY iterators,它不依赖于不必要的容器类型(allocator,predicate)。但是,如果实现的迭代器是完全实现定义的那样。