C++ map容器

        在 C++ 中,std::map 是标准模板库(STL)中的一种关联容器,它存储了键值对(key-value pairs)。每个键值对包含一个键(key)和一个与之相关联的值(value)。std::map 容器中的元素是按照键的顺序自动排序的,通常是按照键的升序排列。

key值起索引作用,value为实值

可以根据key快速的找到value;map中不允许存在相同的key

map的构造与赋值

在插入数据的时候,就算是乱插的,插入后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;
}

map容器的大小与交换

查看容器大小: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();
}

map查找与统计

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);

}

map容器排序

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。这表示在使用此比较器时,较大的值会排在前面(降序排列)。
  • 对于test函数
  • map 容器:这一行创建了一个 map 对象 mmap 是一种关联容器,用于存储键值对。
  • 模板参数
    • int:键的类型。
    • int:值的类型。
    • changeorder:自定义比较类,用于决定键的排序方式。
  • changeorder 类通过重载 operator() 实现了自定义的排序行为。
  • 在 map 容器中使用此比较器允许按降序存储键值对。
  • 可以通过迭代器遍历 map 中的元素并输出每个键值对。

你可能感兴趣的:(c++,开发语言)