天天看點

C++學習(9):關聯容器map、multimap、unordered_map的比較和用法

前言:

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

正文:

學習容器首先學習容器的存儲結構,然後學習增删改查周遊的方法。

#include <iostream>
#include <map>
#include <unordered_map>
#include <string>
using namespace std;

void mapTest() {
	map<string, int> student; //C++的map相當于Java的TreeMap,key唯一,有序

	// 1 增
	student["xiaoB"] = 18;
	student["xiaoA"] = 19; //map重載了運算符[],是以可以直接用此方式添加元素
	student["xiaoA"] = 19; //map的key唯一,是以第二個xiaoA不會存儲
	student.insert(pair<string, int>("xiaoC", 20)); //增加元素也可使用insert()函數

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

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

	// 4 查
	map<string, int>::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<string, int>::iterator ite = student.begin(); ite != student.end(); ite++) {
		cout << ite->first << ":" << ite->second << endl;
	}
}

void multimapTest() {
	multimap<string, int> student; //multimap可以有多個相同的key,其餘特性和map一樣

	student.insert(pair<string, int>("xiaoB", 18));
	student.insert(pair<string, int>("xiaoC", 18));
	student.insert(pair<string, int>("xiaoA", 20));
	student.insert(pair<string, int>("xiaoC", 17));

	int cnt = student.count("xiaoC"); //計數
	cout << cnt << endl;

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

void unordered_map_Test() {
	unordered_map<string, int> student; //C++的unordered_map同Java中的HashMap一樣,元素唯一且無序

	student.insert(pair<string, int>("xiaoB", 18));
	student.insert(pair<string, int>("xiaoC", 18));
	student.insert(pair<string, int>("xiaoA", 20));
	student.insert(pair<string, int>("xiaoC", 17));

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

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

總結:

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

繼續閱讀