day17 周末两天偷懒没更新,今天炼丹加学习,完结STL常用容器部分

还剩下两个常用容器,一个是set(集合容器)  , 一个是map容器

set/multiset 容器

set容器是关联式容器,该容器的特点是:所有元素都会在插入时被自动排序

set/multiset 都是关联式容器 ,其底层结构是使用二叉树实现的。

二者的区别是:set不允许容器中有重复的元素 , multiset允许容器中有重复的元素。

构造  :默认构造和拷贝构造 重载operator=

插入数据的时候没有push  只有insert。

现在来写写特殊的情况,一般的set中默认的是升序排列,下列这段代码第一次打印的时候显示的是 2,5,10,18,如果我想让其降序排列呢,那么还是按照之前的思路,构造一个仿函数即可。仿函数的本质其实是一个类。

class compare
{
public:
    bool operator()(int v1 , int v2)const // 需要加入const . 关键字表示 该操作符不会修改类的成员变量,确保 operator() 方法在对象内部是只读的。
    {
        return v1 > v2;
    }
};

void printinfo(set<int,compare> &s)
{
    for(set<int,compare>::iterator it = s.begin() ; it != s.end() ; it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

void test01()
{
    set<int>s1;
    s1.insert(10);
    s1.insert(5);
    s1.insert(18);
    s1.insert(2);
    printinfo(s1);
    set<int , compare>s2 ; 
    s2.insert(10);
	s2.insert(5);
	s2.insert(18);
	s2.insert(2);
}

int main()
{
    test01();
    system("pause");
    return 0 ;
}

还学习了如何创建队组

队组: 成对出现的数据 , 利用队组可以放回两个数据

创建方式   pair<type , type> p (value1 , value2);

pair<type , type> p = make_pair(value1 , value2);

总结:对于自定义数据类型 set必须指定排序规则才可以插入数据

map/multimap容器

map中所有元素都是pair   pair中第一个元素是key(键值),起到索引作用 第二个元素是value(实值)。

所有元素会根据元素的键值自动排序 从小到大 。

map/multimap关联式容器,二叉树实现。

优点:可以快速根据key找到value。

map中不允许有重复key值的元素   multimap可以有。

使用率仅次与vector list。

构造赋值同set   插入数据的时候一定要使用队组。

使用:size empty swap  find  count 

void printinfo(map<int, int> &m)
{
	for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) 
	{
		cout << it->first << " " ;
		cout << (*it).second << " "<<endl;
	}
	cout << endl;
}
void test01() 
{
	map<int, int>m1;
	//第一种
	m1.insert(make_pair(2, 2));
	//第二种
	m1.insert(pair<int , int>(1,10));
	m1.insert(pair<int, int>(45, 4));
	m1.insert(pair<int, int>(5, 6));
	m1.insert(pair<int, int>(9, 3));
	//第三种  不推荐
	m1.insert(map<int, int>::value_type(3, 30));
	//第四种  不推荐  如果要输出 cout<<m1[5]<< endl ; 他会先创建一个key为5 value为0的元素
	//[]不建议插数  用途使用key访问到value
	m1[6] = 32;
	printinfo(m1);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值