第四十五节 C++ STL(标准模板库)-映射类std::map std::multimap std::unordered_map std::unordered_multimap

map的操作与set类似,操作可参考上一节,这里仅介绍基本操作

映射类: 为key-value(键-值)对容器, 支持根据key查找value, 如根据int可查找对应的string

std::map: 存储唯一的键, 默认从小到大排序

std::mulitmap: 可存储重复的键 , 默认从小到大排序

 std::unordered_map: 用散列函数排序,键唯一

 std::unordered_multimap:用散列函数排序,键可重复

#include     
#include 

using namespace std;

template 
void DisplayContent(const T1 input) {
	int index = 0;

	for (auto Iterator = input.begin(); Iterator != input.end(); ++Iterator) {
		index = std::distance(input.begin(), Iterator);
		cout << " [" << index << "] = ";
		printf("first = %d, second = %s\n", Iterator->first, Iterator->second.c_str());
	}
	cout << endl;
}

int main()
{
	/*1 实例化std::map和std::multimap对象:多种重载构造函数*/
	cout << "use make_pair(): " << endl;
	std::map  keyVavlueMap;
	keyVavlueMap.insert(std::make_pair(2, "this is 2")); //自动排序,可通过谓词修改其排序规则
	keyVavlueMap.insert(std::make_pair(1, "this is 1"));
	keyVavlueMap.insert(std::make_pair(3, "this is 3"));
	DisplayContent(keyVavlueMap);

	cout << "use pair(): " << endl;
	std::map  keyVavlueMap2;
	keyVavlueMap2.insert(std::pair  (4, "this is 4")); //自动排序,可通过谓词修改其排序规则
	keyVavlueMap2.insert(std::pair (6, "this is 6"));
	keyVavlueMap2.insert(std::pair (5, "this is 5"));
	DisplayContent(keyVavlueMap2);

	std::multimap  keyVavlueMulMap(keyVavlueMap.begin(), keyVavlueMap.end());
	keyVavlueMap.insert(std::make_pair(3, "333333"));  //map键唯一,不可改变已经存在的键-值
	cout << "map insert repetition key:" << endl;
	DisplayContent(keyVavlueMap);

	keyVavlueMulMap.insert(std::make_pair(3, "333333"));  //multimap键可重复
	cout << "multimap insert repetition key:" << endl;
	DisplayContent(keyVavlueMulMap);

	cout << "read all key-value in multiset: " << endl;
	int index = 0;
	for (auto Iterator = keyVavlueMulMap.find(3); index < keyVavlueMulMap.count(3); ++index) {
		cout << "first = " <<  Iterator->first << " second = " << Iterator->second.c_str() << endl;
	}
}
use make_pair():
 [0] = first = 1, second = this is 1
 [1] = first = 2, second = this is 2
 [2] = first = 3, second = this is 3

use pair():
 [0] = first = 4, second = this is 4
 [1] = first = 5, second = this is 5
 [2] = first = 6, second = this is 6

map insert repetition key:
 [0] = first = 1, second = this is 1
 [1] = first = 2, second = this is 2
 [2] = first = 3, second = this is 3

multimap insert repetition key:
 [0] = first = 1, second = this is 1
 [1] = first = 2, second = this is 2
 [2] = first = 3, second = this is 3
 [3] = first = 3, second = 333333

read all key-value in multiset:
first = 3 second = this is 3
first = 3 second = this is 3


你可能感兴趣的:(C++,C++基础)