题外话
最近发现自己日常工作中虽然用c++编码,但是没咋用stl的东西,所以就开始补充这方面的知识
正题
1. 声明set容器装的数据类型时可以顺便定义比较函数方法。如:
普通的声明set容器装类型的方式:set<int> ss
声明set容器时还定义比较方法(PS:写比较函数时注意相等比较要返回false):
// 要写成结构体对象方式,而不是函数方式,因为set模板的参数是类型,而不是地址或函数
struct compare
{
bool operator()(const int a, const int b) const{
return a>b;}
}
set<int, compare> ss
2. for_each方法是个好东西。可以调用for_each方法对容器的每一个数据进行传参的函数调用。
例如要输出set容器的每一项,可以这么玩
void print(int a)
{
cout<<a<<endl;
}
for_each(s.begin(), s.end(), print);
由于print是对多种类型适用,所以可以用个模板
template<typename T>
void print(T a)
{
cout<<a<<endl;
}
// 当调用函数用模板时,由于for_each的参数也是模板,调用的函数print是二级模板了,需要指明类型,不然推导不出来
for_each(s.begin(), s.end(), print<int>);
3. 容器的插入时的等价定义:两个值中的任何一个根据排序函数都不在另外一个前面,这两个值就等价,所以不能插入。
!(a.compare(b)) && !(b.compare(a))
eg: a=9, b=10, compare为>
9>10=>false 10>9=>ture
&&结果是false 所以10可以插入