Avi*_*Avi 20 c++ complexity-theory std map
std :: map类的find()函数效率如何?它是否遍历所有寻找密钥的元素,使其为O(n),或者是否在平衡树中,或者它是否使用哈希函数或什么?
Dav*_*d D 36
Log(n)它基于红黑树.
编辑:n当然是地图中的成员数量.
Ari*_*yed 20
std::map并std::set通过编译器厂商使用高度平衡的二叉搜索树(如红黑树,AVL树)来实现.
正如大卫正确指出的那样,find需要O(log n)时间,其中n是容器中元素的数量.
但是,这与基本数据类型,如int,long,char,double等,不是字符串.
如果std:string,将大小'm'用作键,则遍历平衡二叉搜索树的高度将需要将给定键与树的条目进行log n 比较.
何时std::string是std::map或的键std::set,find并且insert操作将花费O(m log n),其中m是需要找到的给定字符串的长度.