map是STL的一种关联式容器,他提供一对一的Hash映射,因此使用中也常常可pair数据结构结合使用,map内部自建一棵红黑树,这棵树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,也基于此,不能直接改变元素的key,因为这会破坏正确次序,要修改元素的key,必须先移除该key的元素,然后插入拥有新的key/value的元素;任何两个元素没有相同的key值

https://blog.csdn.net/u013777351/article/details/48263729

 

map map1;

map1.~map();

 

2:插入

2.1

map<int, string> c;

c.insert(pair<int, string>(1, "Hello map"));

2.2

c.insert(map<int, string>::value_type(2, "second test"));

2.3

c[3] = "third test";

 

3:大小函数

c.size(); // 返回容器的大小

c.empty(); // 判断容器大小是否为零,等同于size() == 0;

c.max_size(); // 返回可容纳的最大元素数量

 

4:查找

c.count(key); // 返回“键的值等于key”的元素个数

c.find(key); // 返回“键的值等于key”的第一个元素,找不到就返回end()

c.lower_bound(); // 返回“键值为key”的元素的第一个可安插位置,

// 也就是“键值>=key”的第一个元素位置

c.upper_bound(key); // 返回“键值为key”的元素的u自后一个可安插位

// 置,也就是“键值>key”的第一个元素位置

c.equal_range(key); // 返回“键值为key”的元素的第一个可安插位置和最

// 后一个可安插位置,也就是“键值==key”的元素区间

example

#include <iostream>

#include <map>
#include <string>

using namespace std;

map<string, int> test1(map<string, int> a) {
	for (map<string, int>::iterator iter = a.begin(); iter != a.end(); iter ++) {
		iter->second += 3;
	}	
	return a;
}


int main() {

	map<int, string> c;
	
	c.insert(pair<int, string>(1, "Hello map"));
	cout << c[1] << endl;
	
	c.insert(map<int, string>::value_type(2, "second test"));
	cout << c[2] << endl;
	
	
	c[3] = "third test";
	cout << c[3] << endl;
	
	// 不影响原来关键字对应的值,也不会报错或警告
	c.insert(pair<int, string>(1, "Hello map else"));
	cout << c[1] << endl;
	
	// 不影响原来关键字对应的值
	c.insert(map<int, string>::value_type(2, "second test else"));
	cout << c[2] << endl;
	
	// 覆盖了原来关键字为3的值
	c[3] = "fourth test";
	cout << c[3] << endl;

	map<int, string>::reverse_iterator iter;
	map<int, string>::iterator it = c.begin();
	
	c[6] = "my test";

	cout<<"------"<<endl;

	for (iter = c.rbegin(); iter != c.rend(); iter ++) {
		cout<<iter->first<<"---"<<iter->second<<endl;
		
	}
	cout<<"------"<<endl;

	for ( ; it != c.end(); it ++) {
		cout<<it->first<<"---"<<it->second<<endl;
	}
	
	cout<<"------"<<endl;

	int count = c.count(1);
	cout<<count<<endl;

	map<int, string>::iterator temp = c.find(1);
	cout<<temp->first<<"---"<<temp->second<<endl;
	
	cout<<"------"<<endl;
	c.insert({11, "abc11"});
	c.insert(make_pair(4, "ab4"));

	for (iter = c.rbegin(); iter != c.rend(); iter ++) {
		cout<<iter->first<<"---"<<iter->second<<endl;
		
	}


}

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐