文章目录
map和multimap容器
- 前言:
- map中的元素都是key=value对
- 元素会自动根据key来排序,同样是通过二叉树实现的
- 优点:可通过key值快速找到value值
一、map容器构造和赋值
- operator=
- 默认构造,拷贝构造
//map容器构造和赋值
//operator=
#include <map>
void traversingMap(map<int, char>& m)
{
for (map<int, char>::iterator it = m.begin(); it != m.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
}
void test()
{
map<int, char> m1; //默认构造
m1.insert(pair<int, char>(97, 'a'));
m1.insert(pair<int, char>(100, 'd'));
m1.insert(pair<int, char>(98, 'b'));
traversingMap(m1);
map<int, char> m2(m1); //拷贝构造
map<int, char> m3 = m1; //operator=赋值
traversingMap(m2);
traversingMap(m3);
}
int main()
{
test();
return 0;
}
二、map容器的大小和交换
- size
- empty,
- swap
map容器的大小和交换
size, empty, swap
三、map容器插入和删除
- insert
- erase
- clear
//map插入和删除
//insert, erase, clear
#include <map>
void traversingMap(map<int, char>& m)
{
for (map<int, char>::iterator it = m.begin(); it != m.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
cout << endl;
}
void test()
{
map<int, char> m1;
m1.insert(pair<int, char>(97, 'a'));
m1.insert(make_pair(98, 'b'));
m1.insert(map<int, char>::value_type(100, 'd'));
traversingMap(m1);
//删除
map<int, char> m2 = m1;
m2.erase(m2.begin()); //也可以是一个迭代区间 m2.erase(m2.begin, --m2.end())
traversingMap(m2);
m2.erase(100); //指定key值来进行删除
traversingMap(m2);
m2.clear();
}
int main()
{
test();
return 0;
}
四、map容器查找和统计
- find
- count
//map容器的查找和统计
//find, count
void test()
{
map<int, char> m1;
m1.insert(make_pair(97, 'a'));
m1.insert(make_pair(99, 'c'));
m1.insert(pair<int, char>(98, 'b'));
traversingMap(m1);
if (m1.find(97) == m1.end())
cout << "没找到\n";
else
cout << "找到了\n";
int num = m1.count(98);
cout << num << endl;
}
int main()
{
test();
return 0;
}
五、修改map容器默认排序规则
- sort
//修改map容器默认排序规则
//和set类似,map容器默认排序规则也是从小到大(按照key值),利用一个仿函数来修改排序规则
#include <map>
class reverseSort
{
public:
bool operator()(int v1, int v2) const
{
return v1 > v2;
}
};
void traversingMap(map<int, char>& m)
{
for (map<int, char>::iterator it = m.begin(); it != m.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
cout << endl;
}
void test()
{
map<int, char> m1;
m1.insert(make_pair(97, 'a'));
m1.insert(map<int, char>::value_type(101, 'e'));
m1.insert(pair<int, char>(98, 'b'));
traversingMap(m1);
map<int, char, reverseSort> m2;
m2.insert(make_pair(97, 'a'));
m2.insert(map<int, char>::value_type(101, 'e'));
m2.insert(pair<int, char>(98, 'b'));
for (map<int, char>::iterator it = m2.begin(); it != m2.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
cout << endl;
}
int main()
{
test();
return 0;
}