vector
创建
vector<int> a;
vector<int> a(10);
vector<int> a(10, 0);
vector<int> b(a); // 拷贝a中元素
操作
a.push_back(x); //尾部插入
a.pop_back(); //尾部删除
a.clear(); //清空
a.size(); //返回大小
a.resize(x); //改变大小
a.insert(a.begin()+i, x) // 插入元素
a.erase(a.begin()+i); // 删除元素
遍历
for(int i = 0; i < s.size(); i++)
cout << a[i];
for(vector<int>::iterator it = a.begin(); it != a.end(); it++)
cout << *it;
set
创建
set<int> s;
vector<int> a; set<int> s(a.begin(), a.end());
操作
s.size();
s.empty();
s.insert(x); // 插入元素
s.erase(x); // 删除元素
s.erase(it); //删除迭代器所指元素,返回下一个迭代器
s.erase(s.begin(), s.end());
s.clear(); //清空set
s.find(x); //返回迭代器,不存在返回s.end()
s.count(x); //判断x是否存在
s.lower_bound(x) //大于等于x第一个元素的迭代器
s.upper_bound(x) //大于x第一个元素的迭代器
遍历
for(set<int>::iterator it = s.begin(); it != s.end(); it++)
cout << *it << endl;
multiset
允许有重复元素的set
map
创建
map<string, int> mp;
操作
mp.insert(pair<string, int>("name", x));
mp["name"] = x;
mp.find("name"); // 返回迭代器,不存在返回mp.end()
mp.count("name"); // 返回1/0
mp.erase("name");
mp.erase(mp.begin(). mp.end());
遍历
for(map<string, int>::iterator it = mp.begin(); it != mp,end(); it++)
cout << (*it).first << (*it).second;
for(auto x : mp)
cout << x.first << x.second;
unordered_map
可能比map快
杂项
离散化
for(int i = 1; i <= n; i++){
int x; cin >> x;
a.push_back(x);
t.push_back(x);
}
sort(t.begin(), t.end());
t.erase(unique(t.begin(), t.end()),t.end());
for(int i = 0; i < a.size(); i++)
a[i] = lower_bound(t.begin(), t.end(), a[i]) - t.begin()+1;