C++:STL容器-map
- 1. map构造和赋值
- 2. map大小和交换
- 3. map插入和删除
- 4. map查找和统计
- 5. map容器排序
map中所有元素都是pair(对组)
pair中第一个元素为key(键),起到索引作用,第二个元素为value(实值);
索引元素都会根据元素的键值自动排序;
本质上:map/multimap属于关联式容器,底层结构都是用二叉树实现。
优点:可以根据key值快速找到value值
map/multimap区别: map不允许容器中有重复key值元素;multimap允许容器中有重复key值元素。
头文件为:#include <map>
1. map构造和赋值
map<T1,T2> mp; //map默认构造函数
map(const map &mp); // 拷贝构造函数
map& operator = (const map &mp); // 重载等号操作赋值
#include <iostream>
#include <map>
using namespace std;
void printMap(map<int,int> &mp){
for(auto & it : mp){
cout << "key=" << it.first << " value=" << it.second <<endl;
}
cout << endl;
}
int main() {
map<int,int> m;
m.insert(pair<int,int>(1,10));
m.insert(pair<int,int>(3,8));
m.insert(pair<int,int>(2,7));
printMap(m);
return 0;
}
2. map大小和交换
size();
empty();
swap(mp); // 交换操作
int main() {
map<int,int> m;
m.insert(pair<int,int>(1,10));
m.insert(pair<int,int>(3,8));
m.insert(pair<int,int>(2,7));
printMap(m);
cout << "m的大小为:" << m.size() << endl;
cout << "m是否为null:" << m.empty() << endl;
map<int,int> m2;
m2.insert(pair<int,int>(100,10));
m2.insert(pair<int,int>(101,20));
printMap(m2);
m2.swap(m);
// 交换操作
printMap(m);
printMap(m2);
return 0;
}
3. map插入和删除
insert(elem); //在容器中插入元素
clear(); // 清除所有元素
erase(pos); // 删除pos迭代器所指的元素,返回下一个元素的迭代器
erase(beg,end); // 删除区间[beg,end)的所有元素,返回下一个元素的迭代器
erase(key); // 删除容器中值为key的元素
int main() {
map<int,int> m;
// map容器插入元素的方法
m.insert(pair<int,int>(1,10));
// 1
m.insert(make_pair(3,8));
// 2
m.insert(map<int,int>::value_type (2,7));
// 3
m[-1] = 100;
// 4 不推荐使用这种方式进行插入操作,建议进行访问
printMap(m);
auto it = m.begin();
it = m.erase(it);
// 删除第一个元素
printMap(m);
m.erase(2);
// 删除键为2的元素
printMap(m);
return 0;
}
4. map查找和统计
find(key); // 查找key是否存在,若存在,返回该键元素的迭代器;若不存在,返回set.end();
count(key); // 统计key的元素个数
int main() {
map<int,int> m;
for (int i=1;i<5;i++)
{
m.insert(make_pair(i,i+1));
}
printMap(m);
auto it = m.find(2);
if(it != m.end())
{
cout << "m存在键值为2的数" << endl;
}
else
{
cout << "m不存在键值为2的数" << endl;
}
return 0;
}
5. map容器排序
利用仿函数,改变排序规则
class MyCompare{
public:
bool operator()(int v1,int v2){
return v1 > v2;
}
};
int main() {
map<int,int> m;
for (int i=1;i<5;i++)
{
m.insert(make_pair(i,i+1));
}
printMap(m);
map<int,int,MyCompare> m2;
for (int i=1;i<5;i++)
{
m2.insert(make_pair(i,i+1));
}
for (auto &it :m2) {
cout << "key=" << it.first << " value=" << it.second <<endl;
}
return 0;
}