set/map学习
做滑动窗口的题目时,发现对map和set的使用不够熟练,因此复习一下。
set
写在前面
(1)set的特性是,所有元素都会根据键值自动排序。由于set不像map既有实值(value)又有键值(key),因此set的键值就是实值。
(2)不能通过迭代器来修改set的键值,因为改变其键值会破坏set的组织,所以set<t>::iterator被定义为const_iterator,杜绝写入操作</t>
底层实现
map和set都是关联式容器,多以RB-tree为底层机制。
常用简单操作
迭代器:begin(), end(), rbegin(), rend();
判断大小:empty(), size(), max_size();
插入
set<int> Set; int x = 5; Set.insert(x);
查找
int cnt = Set.count(x);
auto ite1 = Set.find(x);
if(ite1!=Set.end())
cout << "x found" << endl;删除
Set.erase(x); Set.clear();
map
写在前面
(1)map所有元素都是pair,同时拥有实值和键值;pair第一个值为键值,第二个值为实值;
(2)map不允许又两个元素拥有相同的键值;
(3)通过迭代器可以修改实值,无法修改键值
常用简单操作
迭代器:begin(), end(), rbegin(), rend();
判断大小:empty(), size(), max_size();
插入
map<string, int> Map;
string s = "Hello";
/* 插入pair数据 */
Map.insert( pair<string, int>("Hello",1) );
/* 插入valueType数据 */
Map.insert( map<string, int>("Hello", 1) );查找
int cnt = Set.count(x);
auto ite1 = Set.find(x);
if(ite1!=Set.end())
cout << "x found" << endl;删除
Set.erase(x); Set.clear();
