map、set和unordered_map、unordered_set对比
2017-06-05 15:54
495 查看
一、区别与联系
■map和set:
map和set是依据红黑树来实现的。红黑树属于平衡二叉树,它们的增删改查操作的时间复杂度都是O(logN)。 map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中。所以,如果对map进行中序遍历的话,输出的结果是有序的。
■unordered_map和unordered_set:
unordered_map和unordered_set是依据哈希表实现的。它们是C++Boost库中的内容,unordered翻译成“无序的”,但其实并不是完全无序,而是运用了开散列的存储方式。它们的查找速度是常数级的,比map和set要更快。
而boost::unordered_map是计算元素的Hash值,根据Hash值判断元素是否相同。所以,对unordered_map进行遍历,结果是无序的。
二、map和set(multimap和multiset)的具体操作
■map
map中不允许两个相同的key值存在,如果先前已经插入了一个key1,那么再次插入时就会失败。
□插入:
□删除:
□交换:
□输出:
□查找:
□清空:
□除此之外,map还有以下功能:
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
equal_range() 返回特殊条目的迭代器对
get_allocator() 返回map的配置器
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
upper_bound()
■map和set:
map和set是依据红黑树来实现的。红黑树属于平衡二叉树,它们的增删改查操作的时间复杂度都是O(logN)。 map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中。所以,如果对map进行中序遍历的话,输出的结果是有序的。
■unordered_map和unordered_set:
unordered_map和unordered_set是依据哈希表实现的。它们是C++Boost库中的内容,unordered翻译成“无序的”,但其实并不是完全无序,而是运用了开散列的存储方式。它们的查找速度是常数级的,比map和set要更快。
而boost::unordered_map是计算元素的Hash值,根据Hash值判断元素是否相同。所以,对unordered_map进行遍历,结果是无序的。
二、map和set(multimap和multiset)的具体操作
■map
map中不允许两个相同的key值存在,如果先前已经插入了一个key1,那么再次插入时就会失败。
□插入:
map<int, string> m; m.insert(pair<int, string>(1, "wanger")); m.insert(pair<int, string>(2, "lisi")); m.insert(pair<int, string>(3, "park"));
□删除:
map<int, string> m; m.insert(pair<int, string>(1, "wanger")); m.insert(pair<int, string>(2, "lisi")); m.insert(pair<int, string>(3, "park"));
m.erase(1);
□交换:
map<int, string> m1; map<int, string> m2; m1.insert(pair<int, string>(1, "wanger")); m1.insert(pair<int, string>(2, "lisi"));
m1.insert(pair<int, string>(3, "park")); m2.insert(pair<int, string>(100, "zhangsan")); m2.insert(pair<int, string>(200, "fantas")); m2.insert(pair<int, string>(300, "link")); m1.swap(m2);
□输出:
map<int, string>::iterator it = m.begin(); while(it != m.end()) { cout<<(*it).first<<" "<<(*it).second<<endl; ++it; }
□查找:
map<int, string> m; m.insert(pair<int, string>(1, "wanger")); m.insert(pair<int, string>(2, "lisi")); m.insert(pair<int, string>(3, "park"));
map<int, string>::iterator it = m.find(2);
cout<<(*it).first<<" "<<(*it).second<<endl;
□清空:
map<int, string> m; m.insert(pair<int, string>(1, "wanger")); m.insert(pair<int, string>(2, "lisi")); m.insert(pair<int, string>(3, "park"));
m.clear();
□除此之外,map还有以下功能:
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
equal_range() 返回特殊条目的迭代器对
get_allocator() 返回map的配置器
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
upper_bound()
相关文章推荐
- 【c++】unordered_set和unordered_map
- 20170605_unordered_map和unordered_set的具体使用案例
- 【C++】【总结】unordered_map,unordered_set,map和set的用法和区别
- C++11 unordered_set & unordered_map 存储结构体(struct)
- hash_map vs unordered_map vs map vs unordered_set
- STL set multiset map multimap unordered_set unordered_map example
- c++ unordered_map/set自定义对象的hash
- STL容器分析--unordered_map/unordered_set(C++11)
- unordered_map及map访问键值速率对比
- 单数组哈希表unordered_map和unordered_set(转)
- map/multimap/unordered_map/unordered_multimap; set/multiset/unordered_set/unordered_multiset
- c++的multimap(set)和unordered_map(set)
- STL set multiset map multimap unordered_set unordered_map example
- C++11 新特性: unordered_map 与 map 的对比
- C++11 新特性: unordered_map 与 map 的对比
- 【map】【unordered_map】map和unordered_map中键类型为自定义类型的操作
- C++11 新特性: unordered_map 与 map 的对比
- 23 hashtable&unordered_set&unordered_map深度探索
- unordered_map详解
- STL map与Boost unordered_map