multimap迭代器是否也需要排序函数的类型?

时间:2012-02-09 17:44:06

标签: c++ iterator multimap

希望这是一个快速简单的问题。我是否需要bool(*)(char,char)下面的typedef,或者我可以使用multimap<char,char>::iterator来使用地图mmIt的{​​{1}}迭代器吗?谢谢你的帮助!

代码段:

mmap

3 个答案:

答案 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)。但是,如果实现的迭代器是完全实现定义的那样。