1. 程式人生 > >c++: 關聯容器的使用方法

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