1.pair
单个元素 pair<int, int> a;
多个元素 pair<int, int> a[N];
其中int 可以被替换成多种类型,比如double,string, 甚至vector
# define x first
# define y second
pair<int, int> a;
a.x = 1; a.y = 2;//存储(1,2)
2.vector
动态数组,格式为vector<某类型>,可以是int,double,string,甚至pair
输入和操作:
vector<pair<int, vector<int>>;
vector<int> 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<vector<int>, int> a;
vector<pair<int, vector<int>>> 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<int, int >和vector<int> 可直接作为key使用
哈希表的value可以是其他数组类型,比如vector
map<pair<int, vector<int>>, int>;
map.size();//测量map的大小
unordered_map<vector<int>, int> map1; // 这种用法错误
map<vector<int>, int> map2; // 用法正确
unordered_map<int, vector<int>> map; // 用法正确