前言:
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的容器很多都是相通的,對比掌握。