一、map/multimap
map是关联容器,它按照特定顺序存储由key和value组合形成的元素;
- 键值通常用于对元素进行
排序
和唯一
标识;
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less<Key>, // map::key_compare
class Alloc = allocator<pair<const Key,T> > // map::allocator_type
> class map;
1、常用成员函数
begin()
:返回第一个元素;end()
:返回最后一个元素后面一个位置;rbegin()
:返回容器最后一个元素;rend()
:返回第一个元素前的一个位置;size()
:元素个数;max_size()
:最大元素个数;empty()
:判断是否为空;emplace()
:插入元素,能够自动构造对象;emplace_hint()
:根据位置插入;insert()
:删除指定值的元素;insert(pos, elem)
:在pos插入eleminsert(pos, n, elem)
:pos位置插入n个元素elem;erase(cmp)
:删除满足条件的元素;erase()
:删除一个或几个元素;swap()
:交换容器;clear()
:删除双端队列容器中的所有元素;key_comp()
:返回比较对象;value_comp()
:返回比较对象;find()
:获取元素的迭代器;count()
:查看是否具有特定值的元素;lower_bound()
:将迭代器返回到下限;upper_bound()
:将迭代器返回到上限;equal_range()
:获取相等元素的范围;[]
:访问元素;at()
:访问元素;
2、案例
#include <iostream>
#include <string>
#include <map>
using namespace std;
map<int, string> mp = {{1, "jie"}, {2, "io"}, {3, "jj"}};
int main() {
// ret:178956970
//cout << "max_size: " << mp.max_size() << endl;
// ret: 4
//mp.insert(std::pair<int, string>(100, "qq"));
//cout << "size: " << mp.size() << endl;
// ret: 4
//mp.insert(mp.begin(), std::pair<int, string>(100, "qq"));
//cout << "size: " << mp.size() << endl;
// ret: 2
//mp.erase(1);
//cout << "size: " << mp.size() << endl;
// ret: 7 8
//map<int, string> mp2 = {{7, "ii"}, {8, "oo"}};
//mp.swap(mp2);
//for(auto& i:mp) {
// cout << i.first << " " << i.second << " ";
//}
//mp.clear();
//for(auto& i:mp) {
// cout << i << " ";
//}
//mp.emplace(100, "ll");
//mp.emplace_hint(mp.begin(), 110, "oo");
//for(auto& i:mp) {
// cout << i << " ";
//}
// ret: io
//auto it = mp.find(2);
//if(it != mp.end())
// cout << it->second << endl;
// ret:find!!!
//if(mp.count(1)!=0)
// cout << "find!!!" << endl;
//else
// cout << "no!!!" << endl;
// ret:jie
//auto it = mp.lower_bound(1);
//cout << it->second << endl;
// ret:jie
//auto it = mp.upper_bound(1);
//cout << it->second << endl;
// ret:
//auto it = mp.equal_range(2);
//cout << "lower_bound:" << it.first->first << " " << it.first->second << endl;
//cout << "upper_bound:" << it.second->first << " " << it.second->second << endl;
// ret: jie
//cout << mp[1] << endl;
return 0;
}