map 容器
map容器的头文件map
#include<map>
map构造
map的构造:
- set<T1,T2> st; //默认构造函数:
void test()
{
map<int,int> mp;
}
- set(const set &st); // 拷贝构造
void test()
{
map<int,int> mp1;
map<int,int> mp2(mp1); // 拷贝mp1
}
- map& operator=(const map &mp); // 复制构造
void test()
{
map<int,int> mp1;
map<int,int> mp2;
mp2 = mp1; // 复制构造
}
map容器插入和删除
- 插入
m.insert(pair<int,int>(key,value));
map容器中的元素都是pair对,其中的元素均为pair<T1,T2>(key,value)的形式;
auto it = mp.begin(); 则 it 指针指向的元素为pair对,
it->first = key;
it->second = value;
void test()
{
map<int,int>mp;
mp.insert(pair<int,int>(1,10)); //插入一个键值对
}
* `m.insert(make_pair(key,value));`
void test()
{
map<int,int>mp;
mp.insert(make_pair(1,10)); //插入一个键值对
}
* `m.insert(map<int,int>::value_type(key,pair));`
void test()
{
map<int,int>mp;
mp.insert((map<int,int>::value_type(1,10)); //插入一个键值对
}
* `m[key] = value ; // 不建议使用该方法插入,可以用来快速查询是否有对应键的值`
- 删除
m.erase(m.being); // 删除m中的一项元素,返回其后一项
m.erase(key); // 删除对应key值得键值对
- 清空
m.erase(m.begin(),m.end());
m.clear();
map容器的大小
- 当前的容器大小 : size();
mp.size(); // 返回容器大小
- 当前容器是否为空 : empty();
mp.empty(); // 当前容器是否为空,空返回true
- 交换两个容器:swap();
mp1.swap(mp2); // 交换mp1和mp2
map的查找和统计
map<T1,T2>& = m.find(key); // 返回一个迭代器或m.end()
int m.count(key); //统计对应key的键值对的个数,因为map中不允许重复key值,所以返回0或1
map容器排序
class MyCompare {
public:
bool operator()(int v1, int v2) {
return v1 > v2;
}
};
void test()
{
//默认从小到大排序
//利用仿函数实现从大到小排序
map<int, int, MyCompare> m;
m.insert(make_pair(1, 10));
m.insert(make_pair(2, 20));
m.insert(make_pair(3, 30));
m.insert(make_pair(4, 40));
m.insert(make_pair(5, 50));
for (auto it = m.begin(); it != m.end(); it++) {
cout << "key:" << it->first <<
" value:" << it->second << endl;
}
}