C++11新特性学习--容器篇

本文介绍了C++中map, set, multimap和unordered_set关联容器的使用,展示了它们的特性,如排序、重复值处理和操作演示。重点在于set与multiset的区别,以及unordered_set的无序特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class STLClass
{
public:  //关联容器 排序的 map set 
    static void testMultiSet()  //可以有重复值
    {
        multiset<string> city{"xian","beijing","tianjin","henan","weinan"};
        for(const auto &elem : city)
        {
            cout<<elem<<endl;
        }
        city.insert({"pucheng","fuping","xian"});
        for(const auto &elem : city)
        {
            cout<<elem<<endl;
        }
    }

    static void testSet()  //不允许有重复值
    {
        set<string> city{"xian","beijing","tianjin","henan","weinan"};
        for(const auto &elem : city)
        {
            cout<<elem<<endl;
        }
        city.insert({"pucheng","fuping","xian"}); //新添加的xian会被删除
        for(const auto &elem : city)
        {
            cout<<elem<<endl;
        }
    }

    static void testMultiMap() //元素能重复
    {
        multimap<int ,string> mmap;
        mmap={
            {1,"sss"},{3,"qqq"},{8,"aaa"},{7,"bbb"},{3,"qqq"}
        };
        for(const auto &elem : mmap)
        {
            cout<< elem.first<<":"<<elem.second<<endl;
        }
    }
    static void testMap() //元素不能重复 自动会删除
    {
        map<int ,string> mmap;
        mmap={
            {1,"sss"},{3,"qqq"},{8,"aaa"},{7,"bbb"},{3,"qqq"}
        };
        for(const auto &elem : mmap)
        {
            cout<< elem.first<<":"<<elem.second<<endl;
        }

        map<int ,string>::iterator itor;
        for(itor=mmap.begin();itor!=mmap.end();itor++)
        {
            cout<<"iter:" <<itor->second<<endl;
        }


    }
public: //无序容器 unorderedSet   unorderedMultiSet
    static void testUnorderedSet()
    {
        unordered_multiset<string> city{"xian","beijing","tianjin","henan","weinan"};
        for(const auto &elem : city)
        {
            cout<<elem<<endl;
        }
        city.insert({"pucheng","fuping","xian"});
        for(const auto &elem : city)
        {
            cout<<elem<<endl;
        }

        unordered_multiset<string>::iterator itor;
        for(itor=city.begin();itor!=city.end();itor++)
        {
            cout<<"iter:" <<*itor<<endl;
        }

    }

    static void testUnordered_multimap()
    {
        unordered_multimap<int ,string> mmap;
        mmap={
            {1,"sss"},{3,"qqq"},{8,"aaa"},{7,"bbb"},{3,"qqq"}
        };
    }


};


class PrintInt
{
public:
    void operator()(int elem)
    {
        cout<<elem<<endl;
    }
    //for_each 实现方法
    template<typename Iterator,typename Operation>
    Operation for_each(Iterator act,Iterator end,Operation op)
    {
        while (act!=end)
        {
            op(*act);
            ++act;
        }
        return op;
    }

    static void test()
    {
        vector<int> coll;
        for(int i=0;i<5;i++)
            coll.push_back(i);
        
        //for_each(coll.cbegin(),coll.cend(),PrintInt());
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值