1.pair
单个元素 pair[HTML_REMOVED] a;
多个元素 pair[HTML_REMOVED] a[N];
其中int 可以被替换成多种类型,比如double,string, 甚至vector
`# define x first
define y second
pair[HTML_REMOVED] a;
a.x = 1; a.y = 2;//存储(1,2)
2.vector`
动态数组,格式为vector<某类型>,可以是int,double,string,甚至pair
输入和操作:
vector[HTML_REMOVED]>;
vector[HTML_REMOVED] v;
int n = 5;
for(int i = 0; i < n; i++)
{
int t;
scanf(“%d”, &t);
v.push_back(t);
}
//注意:不能按v[i]输入,静态数组(正常数组才可以)
v[2] ++;
printf(“%d”, v[3]);
//后面的就都可以用v[i]来表示了
map[HTML_REMOVED], int> a;
vector[HTML_REMOVED]>> ans;
for(auto p : a)
{
ans.push_back({-p.y, p.x});
//vector的pair存储用法
}
sort(ans.begin(), ans.end());
//vector 排序
for(auto p : ans)
{
printf(“%d”, -p.x);//默认从小到大排,此处为从大到小排
for(auto a : p.y)//遍历vector
printf(” %d”,a);
puts(“”);//for(auto p : ans)的换行
}
3.map
map中可以插入pair,但是unordered_map不行
unordered_map和unordered_set的内部实现是哈希表,这就要求作为key应该可哈希,所以pair和vector一类都不行
map和set的内部实现是树(红黑树,更高级的二叉搜索树),pair和vector为二叉搜索树的搜索提供方法,所以pair[HTML_REMOVED]和vector[HTML_REMOVED] 可直接作为key使用
哈希表的value可以是其他数组类型,比如vector
map[HTML_REMOVED]>, int>;
map.size();//测量map的大小
unordered_map[HTML_REMOVED], int> map1; // 这种用法错误
map[HTML_REMOVED], int> map2; // 用法正确
unordered_map[HTML_REMOVED]> map; // 用法正确