map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。
map内部实现了一个红黑树,该结构具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素,因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行这样的操作,故红黑树的效率决定了map的效率。
1.插入元素:
map<int, string> mapStudent; // 第一种 用insert函數插入pair mapStudent.insert(pair<int, string>(000, "student_zero")); // 第二种 用insert函数插入value_type数据 mapStudent.insert(map<int, string>::value_type(001, "student_one")); // 第三种 用"array"方式插入 mapStudent[123] = "student_first";
当所查找的关键key出现时,它返回数据所在对象的位置,如果沒有,返回iter与end函数的值相同。 // find 返回迭代器指向当前查找元素的位置否则返回map::end()位置 iter = mapStudent.find("123");
//迭代器刪除 iter = mapStudent.find("123"); mapStudent.erase(iter);
4…
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数, (帮助评论区理解: 因为key值不会重复,所以只能是1 or 0)
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
unordered_map: unordered_map内部实现了一个哈希表,因此其元素的排列顺序是杂乱的,无序的
常用函数:
multimap容器保存的是有序的键/值对,但是可以保存重复的元素。multimap中会出现具有相同键值的元素序列。multimap大部分成员函数的使用方式和map相同。因为重复键的原因,multimap有一些函数的使用方式和map有一些区别。
1.find()
multimap 的成员函数 find() 可以返回一个键和参数匹配的元素的迭代器。
2.equal_range()
如果我们想访问给定键对应的所有元素。成员函数 equal_range() 就可以做到这一点。它会返回一个封装了两个迭代器的 pair 对象,这两个迭代器所确定范围内的元素的键和参数值相等。
auto pr = people.equal_range("Ann"); if(pr.first != std::end(people)) { for (auto iter = pr.first ; iter != pr.second; ++iter) std:cout << iter->first << " is " << iter->second << std::endl; }
auto iter1 = people.lower_bound("Ann"); auto iter2 = people.lower_bound("Ann"); if(iter1 != std::end(people)) { for(auto iter = iterl ; iter != iter2; ++iter) std::cout << iter->first << " is " << iter->second << std::endl; }
4.count()
通过调用 multimap 的成员函数 count() 可以知道有多少个元素的键和给定的键相同。
5.erase()
multimap 的成员函数 erase() 有 3 个版本: