multiset
用法
multiset
是一种支持在
l
o
g
n
logn
logn 的时间内完成插入 / 删除 / 查询,以权值为下标的数据结构并且支持重复数字(类似权值线段树)
1 ∣ 1|\space 1∣ 插入操作
multiset <int> s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(1);
for(auto i:s)
cout<<i<<" ";
2 ∣ 2| 2∣ 删除操作
c.erase(elem)
: 删除与elem
相等的所有元素
multiset <int> s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(1);
s.erase(1);
for(auto i:s)
cout<<i<<" ";
c.erase(pos)
: 移除迭代器pos
所指位置元素
multiset <int> s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(1);
s.erase(s.find(1));
for(auto i:s)
cout<<i<<" ";
3 ∣ 3| 3∣ 查询操作
find(elem)
: 返回元素值为elem
的第一个元素,如果没有返回end()
end()
:最后一个元素的下一个位置
multiset <int> s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(1);
//found
cout<<*s.find(1)<<endl;
cout<<*s.find(2)<<endl;
cout<<*s.find(3)<<endl;
puts("");
//not found
cout<<*s.end()<<endl;
cout<<*s.find(0)<<endl;
cout<<*s.find(4)<<endl;
cout<<*s.find(6)<<endl;
4 ∣ 4| 4∣ 常用操作
- 输出最大元素
multiset <int> s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(10);
cout<<*--s.end()<<endl;
- lower_bound / upper_bound
lower _bound(elem)
:返回元素值 ≥ \geq ≥elem
的第一个元素位置
upper _bound (elem)
: 返回元素值 > > >elem
的第一个元素位置
multiset <int> s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(5);
s.insert(1);
cout<<*s.lower_bound(4);