在 C++ 中,std::map
是标准模板库(STL)中的一种关联容器,它存储了键值对(key-value pairs)。每个键值对包含一个键(key)和一个与之相关联的值(value)。std::map
容器中的元素是按照键的顺序自动排序的,通常是按照键的升序排列。
key值起索引作用,value为实值
可以根据key快速的找到value;map中不允许存在相同的key
在插入数据的时候,就算是乱插的,插入后map会根据key值自己排序
void printmap(map& m)
{
for (map::iterator it=m.begin ();it!=m.end ();it++)
{
cout << "key= " << (*it).first << "value= " << (*it).second << endl;
}
}
void test()
{
//map容器的创建 成对出现
mapm;
//插入 insert
m.insert(pair(1, 10));
m.insert(pair(2, 20));
m.insert(pair(3, 30));
//copy构造
mapm1(m);
//赋值
mapm3;
m3 = m2;
}
查看容器大小:size()
判断是否为空 empty()
交换两个容器: swap()
void test()
{
//map容器的创建 成对出现
mapm;
//插入 insert
m.insert(pair(1, 10));
m.insert(pair(2, 20));
m.insert(pair(3, 30));
mapm1;
//插入 insert
m.insert(pair(4, 10));
m.insert(pair(5, 20));
m.insert(pair(6, 30));
if (m.empty())
{
cout << "m 为空!" << endl;
}
else {
cout << "m 不为空!" << endl;
cout << "m 的大小为:" << m.size()<
插入 insert(elem)
清除所有的元素:clear()
erase(pos)删除pos迭代器所指向的元素,返回下一个元素的迭代器
erase(beg,end):删除【beg,end)的所有元素,返回下一个元素的迭代器
erase(key):删除容器中值为key的元素
void test()
{
//map容器的创建 成对出现
mapm;
//插入 insert
m.insert(pair(1, 10));
m.insert(pair(2, 20));
m.insert(pair(3, 30));
//第二种插入方式 make_pair
m.insert(make_pair(4, 60));
//map容器的删除 删除key为1的数据组
m.erase(1);
//区间删除,等价于清空
m.erase(m.begin(), m.end());
//清空map
m.clear();
}
find(key):查找key是否存在,若存在则返回该元素的迭代器,若不存在,返回.end()
count(key) : 统计key元素的个数,结果要么是1.要么是0
void test()
{
//map容器的创建 成对出现
mapm;
//插入 insert
m.insert(pair(1, 10));
m.insert(pair(2, 20));
m.insert(pair(3, 30));
//查找
map::iterator pos = m.find(3);
if (pos == m.end())
{
cout << "没找到!" << endl;
}
else {
cout << "找到了 key=" << (*pos).first() << "value =" << pos->second << endl;
}
//统计 由于key排序后,是不允许插入重复的key元素
//所以统计的结果只有0 和1
int number = m.count (3);
}
class changeorder {
public:
bool operator()(int v1, int v2) const {
return v1 > v2;
}
};
void test() {
// map容器的创建 成对出现
std::map m;
// 插入 insert
m.insert(std::make_pair(1, 10));
m.insert(std::make_pair(2, 20));
m.insert(std::make_pair(3, 30));
for (auto it = m.begin(); it != m.end(); it++) {
std::cout << "key= " << it->first << " value= " << it->second << std::endl;
}
}
创建仿函数实现降序排列
changeorder
是一个类,用于自定义比较行为。operator()
:这个方法使得类的实例可以像函数一样被调用。
v1
和 v2
。v1
大于 v2
,返回 true
,否则返回 false
。这表示在使用此比较器时,较大的值会排在前面(降序排列)。map
容器:这一行创建了一个 map
对象 m
,map
是一种关联容器,用于存储键值对。int
:键的类型。int
:值的类型。changeorder
:自定义比较类,用于决定键的排序方式。changeorder
类通过重载 operator()
实现了自定义的排序行为。map
容器中使用此比较器允许按降序存储键值对。map
中的元素并输出每个键值对。