C++学习(9):关联容器map、multimap、unordered_map的比较和用法

前言:

C++ Java 特点
map TreeMap 元素key唯一,且有序
multimap 元素key不唯一,其他同map
unordered_map HashMap 元素key唯一,但无序

正文:

学习容器首先学习容器的存储结构,然后学习增删改查遍历的方法。

#include 
#include 
#include 
#include 
using namespace std;

void mapTest() {
	map student; //C++的map相当于Java的TreeMap,key唯一,有序

	// 1 增
	student["xiaoB"] = 18;
	student["xiaoA"] = 19; //map重载了运算符[],所以可以直接用此方式添加元素
	student["xiaoA"] = 19; //map的key唯一,所以第二个xiaoA不会存储
	student.insert(pair("xiaoC", 20)); //增加元素也可使用insert()函数

	// 2 删
	student.erase("xiaoC");

	// 3 改
	student["xiaoA"] = 20;
	student.at("xiaoB") = 20;

	// 4 查
	map::iterator ite = student.find("xiaoA");  //find函数的返回值是迭代器
	if (ite != student.end()) {
		cout << ite->first << ":" << ite->second << endl;
	}

	int cnt = student.count("xiaoF"); //count函数返回key的数量(0或1)
	cout << cnt << endl;

	for (map::iterator ite = student.begin(); ite != student.end(); ite++) {
		cout << ite->first << ":" << ite->second << endl;
	}
}

void multimapTest() {
	multimap student; //multimap可以有多个相同的key,其余特性和map一样

	student.insert(pair("xiaoB", 18));
	student.insert(pair("xiaoC", 18));
	student.insert(pair("xiaoA", 20));
	student.insert(pair("xiaoC", 17));

	int cnt = student.count("xiaoC"); //计数
	cout << cnt << endl;

	for (map::iterator ite = student.begin(); ite != student.end(); ite++) {
		cout << ite->first << ":" << ite->second << endl;
	}
}

void unordered_map_Test() {
	unordered_map student; //C++的unordered_map同Java中的HashMap一样,元素唯一且无序

	student.insert(pair("xiaoB", 18));
	student.insert(pair("xiaoC", 18));
	student.insert(pair("xiaoA", 20));
	student.insert(pair("xiaoC", 17));

	for (unordered_map::iterator ite = student.begin(); ite != student.end(); ite++) {
		cout << ite->first << ":" << ite->second << endl;
	}
}

int main()
{
	mapTest();
	multimapTest();
	unordered_map_Test();
}

总结:

C++和Java的容器很多都是相通的,对比掌握。

你可能感兴趣的:(C\C++)