c++: 关联容器的使用方法

关联容器有:map、multimap、set、multiset

map的元素是pair类型、<关键字,值>对,其中关键字是const,不能修改,值可以修改。

set的元素是关键字,const,只能访问、不能修改。

multimap 和 multiset 都允许多个元素有相同的关键字。

当用一个迭代器遍历一个 map、multimap、set、multiset 时,迭代器会按照关键字升序遍历元素。

通常,不对关联容器使用泛型算法,因为它们的关键字都是const,无法修改,而且关联容器的元素不能通过他们的关键字快速查找。

使用实例:

#include<map>
#include<set>

using namespace std;

// 打印map,默认升序打印
void printmap(const map<string, int>&map)
{
	for_each(map.begin(), map.end(), [](const pair<string, int>&i) {cout << i.first << " : " << i.second << endl;});
	cout << endl;
}

// 打印set,默认升序打印
void printset(const set<int>&set)
{
	for_each(set.begin(), set.end(), [](const int&i) {cout << i <<  "  " ; });
	cout << endl;
}

int main()
{
	map<string, int> imap = {{"xiaoming", 12},{"Mike", 26},{"linda", 10}};
	//修改map的值
	auto it = imap.begin();
	it->second = 99;
	//输出变量it的类型名
	cout << typeid(it).name() << endl;
	//给map添加元素有四种方法,insert()的返回值ret是pair类型,
	//pair的first成员ret.first是一个迭代器,指向具有给定关键字的元素
	//pair的second成员ret.second是个bool值,表示元素插入成功与否
	//ret.first-> : 解引用此迭代器,提取map中的元素,元素也是一个pair
	//ret.first->second :map中元素的值部分
	//++ret.first->second :递增此值
	imap.insert({"joe", 22});
	imap.insert(make_pair("liu", 33));
	imap.insert(pair<string, int>("zhang", 44));
	imap.insert(map<string, int>::value_type("xu", 55));
	//打印map
	printmap(imap);

	set<int> iset = {3,1,8,6,9,0,7,4};	
	//给set添加元素:insert(一堆迭代器or初始化列表),若插入已存在的元素,则对容器无影响
	iset.insert({11,22,33,11,22,33});
	vector<int> ivec = {23,45,67,67,78};
	iset.insert(ivec.begin(), ivec.end());
	//打印set
	printset(iset);

	system("pause");
	return 0;
}

打印的结果:

Mike : 26
linda : 10
xiaoming : 12
0  1  3  4  6  7  8  9

猜你喜欢

转载自blog.csdn.net/growth_path_/article/details/82838684
今日推荐