ACM-STL 2


六、集合set
set 和 multiset会根据特定的排序准则,自动将元素排序,两者的不同之处在于multiset可以允许元素重复而set不允许元素重复。正因为set的不重复性,可以在去重操作时把数据放入set。
set中的元素默认由小到大排序
操作:
s.insert(elem) -- 安插一个elem副本,返回新元素位置。
s.erase(elem) -- 移除与elem元素相等的所有元素,返回被移除的元素个数。
s.erase(pos) -- 移除迭代器pos所指位置上的元素,无返回值。
s.clear() -- 移除全部元素,将整个容器清空。
迭代器举例:multiset <int> :: iterator pos;for(pos = s.begin(); pos != s.end(); pos++)
迭代器相当于我们学的指针,用来给元素标明位置。指向地址,而不指向值。上面的迭代器可以用来输出set中的元素,其中循环条件不可作<,因为s.end()是地址而不是值。
s.find(a)--在set容器中寻找元素a。
操作:
s.count(elem) -- 返回元素值为elem的元素的个数。
s.lower_bound(elem) -- 返回 元素值>= elem的第一个元素位置。
s.upper_bound(elem) -- 返回元素值 > elem的第一个元素的位置。
以上位置均为一个迭代器。

七.结构体
定义:
struct 结构体类型名
{
  成员声明
}结构变量
结构体的成员不能独立使用,必须由结构体类型的变量通过成员选择运算符"."来选择,或者由结构体类型的指针通过"->"运算符选择。定义结构体类型之后,就可以创建该类型的变量。

八.map和multimap
  所有元素都会根据元素的键值自动排序,map的所有元素都是pair,pair的第一个元素被视为键值,第二个元素为实值。map不允许两个元素有相同的键值,但multimap可以。
这里针对pair:pair 是 一种模版类型。每个pair 可以存储两个值。这两种值无限制。也可以将自己写的struct的对象放进去。map就是将key和value放在一起来保存。
应用时如果一个函数有两个返回值 的话,如果是相同类型,就可以用数组返回,如果是不同类型,就可以自己写个struct ,但为了方便就可以使用 c++  自带的pair ,返回一个pair,其中带有两个值。
  头文件: #include <map>
定义:map<data_type1,data_type2>map_name;如:map <string, int> m;
默认按string由小到大排序
  操作:m.size() 返回容器大小
m.empty() 返回容器是否为空
m.count(key) 返回键值等于key的元素的个数m.lower_bound(key) 返回键值等于key的元素的第一个可安插的位置
m.upper_bound(key) 返回键值等于key的元素的最后一个可安插的位置
m.begin() 返回一个双向迭代器,指向第一个元素
m.end() 返回一个双向迭代器,指向最后一个元素的下一个位置
m.clear() 讲整个容器清空
m.erase(elem) 移除键值为elem的所有元素,返回个数,对于map来说非0即1
m.erase(pos) 移除迭代器pos所指位置上的元素。直接元素存取:m[key] = value;查找的时候如果没有键值为key的元素,则安插一个键值为key的新元素,实值为默认(一般0)。
操作:
m.insert(elem) 插入一个元素elem
a)运用value_type插入
map<string, float> m;
m.insert(map<string, float>:: value_type ("Robin", 22.3));
b) 运用pair<>
m.insert(pair<string, float>("Robin", 22.3));
c) 运用make_pair()
m.insert(make_pair("Robin", 22.3));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值