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