目录
一,multimap介绍
二,multimap使用
一,multimap介绍
- multimap是关联式容器,按照特定顺序存储键值对<key、value>,其中多个键值对之间的key可以重复;
- 通常按照key排序和唯一标识元素,而映射的value存储与key关联的内容;key和value的类型可能不同,通过multimap内部的成员类型value_type组合在一起,value_type是组合key和value的键值对,别名为pair(typedef pair<const key, T> value_type);
- multimap中的元素总是通过其内部比较对象,按照指定的严格弱排序标准对key进行排序的;
- multimap通过key访问单个元素的速度通常比unordered_multimap容器慢,但使用迭代器直接遍历multimap中的元素可以得到关于key有序的序列;
- multimap在底层用二叉搜索树(红黑树)来实现;
注:multimap与map唯一不同就是,map中key是唯一的,multimap中key是可以重复的;
二,multimap使用
- multimap中key是可以重复的;
- multimap中的元素默认将key按照小于来比较;
- multimap中没有重载operator[]操作;
构造函数
操作函数
//迭代器iterator begin() noexcept;
const_iterator begin() const noexcept;iterator end() noexcept;
const_iterator end() const noexcept;reverse_iterator rbegin() nothrow;
const_reverse_iterator rbegin() const nothrow;reverse_iterator rend() nothrow;
const_reverse_iterator rend() const nothrow;//插入
single element (1) iterator insert (const value_type& val);template <class P> iterator insert (P&& val);
with hint (2) iterator insert (const_iterator position, const value_type& val);template <class P> iterator insert (const_iterator position, P&& val);
range (3) template <class InputIterator>void insert (InputIterator first, InputIterator last);
initializer list (4) void insert (initializer_list<value_type> il);//删除
iterator erase (const_iterator position);
size_type erase (const key_type& k);
iterator erase (const_iterator first, const_iterator last);//查找iterator find (const key_type& k);
const_iterator find (const key_type& k) const;bool empty() const noexcept;
size_type size() const noexcept;
size_type count (const key_type& k) const;
void swap (multimap& x);
void clear() noexcept;
key_compare key_comp() const;
value_compare value_comp() const;iterator lower_bound (const key_type& k);
const_iterator lower_bound (const key_type& k) const;iterator upper_bound (const key_type& k);
const_iterator upper_bound (const key_type& k) const;pair<const_iterator,const_iterator> equal_range (const key_type& k) const;pair<iterator,iterator> equal_range (const key_type& k);
int main()
{multimap<string, string> m;m.insert(pair<string, string>("peach", "桃子")); m.insert(make_pair("banan", "香蕉"));m.insert(make_pair("banan", "香蕉"));cout << m.size() << endl;cout << m.count("banan") << endl;for (auto& e : m){cout << e.first << "-->" << e.second << endl;}m.erase("banan");multimap<string, string>::iterator it = m.begin();while (it != m.end()){cout << (*it).first << "-->" << (*it).second << endl;++it;}it = m.find("peach");cout << (*it).first << "-->" << (*it).second << endl;return 0;
}