set
1.insert插入
ser中插入的方法规则和搜索二叉树一样,大于key在右边,小于在左边。
插入成功返回pair类型,里面第一个参数iterator 指向新插入节点 bool是true
失败 参数iterator 指向已经存在的节点 bool是false
set<int>a;
//1.直接插入值
a.insert(1);
a.insert(2);
a.insert(3);
a.insert(4);
for (auto& i : a)
{
cout << i << ' ';
}
cout << endl;
//2.在pos位置插入 不常用
a.insert(a.begin(), 10);
for (auto& i : a)
{
cout << i << ' ';
}
cout << endl;
set<int>b;
//3.插入一段区间 a.begin()+1不对 没有对应重载
b.insert(++a.begin(), a.end());
for (auto& i : b)
{
cout << i << ' ';
}
cout << endl;
2.find查找
找到返回节点位置iterator,找不到返回end()
3.erase删除
a.erase(a.begin())指定位置删除 删除最小值
4.count返回set中对应数据的个数
在set只有0个或者1个,可以判断是否存在。但在multiset中可以存在重复的值,返回对应数的个数。
5.upper_bound lower_bound
lower_bound(30) 返回>=30的位置
upper_bound(60) 返回>60的位置
myset.erase(itlow,itup)删除>=30 <60的数。因为删除是[ ) 所以upper_bound返回大于目标值的位置
multiset
multiset可以插入重复的值
insert
一般都会插入成功,所以只返回iterator插入成功的位置
find
multiset查找是根据中序遍历的顺序,如果有多个相同的值返回最左边的节点(中序遍历的第一个)。
count
返回对应值的个数
equal_range 返回同一个值的范围 左闭右开[ )
ret.first第一个30位置 ret.second 77位置
map
map和set区别在于map是ket value模型,set数据只有key。
insert
map虽然有两个数据,但只需传一个参数pair就行。
value_type pair<const key_type,mapped_type>
插入成功返回pair类型,里面第一个参数iterator 指向新插入节点 bool是true.
失败 参数iterator 指向已经存在的节点 bool是false.
有就返回节点位置,没有创建节点并返回对应位置。
operator[]
返回值为节点的value,实现过程
1.make_pair(K,mapped_type)) 创建一个pair对象
2.this->insert(——) 插入有就返回已存在的节点,没有就新创建一个并返回。类型为pair<iterator,bool>
3.(this->insert(——)).first 取目标节点的iterator
4.*((this->insert(——)).first)解引用返回,类型为pair<key,value>
5.*((this->insert(——)).first).second 取value
operator[]用法
multimap
如果两个节点key值一样,multimap仍可以储存。
multimap中没有[]的重载,因为可能有多个相同的值。