zoukankan      html  css  js  c++  java
  • STL系列 set

    set is a container that NOT allow same element, while multiset allows .

    feature : binary tree .

    here example of contains almost all functions:

    #include <set>
    #include <iostream>
    using namespace std;
    //display in order
    void display_all(const multiset<int> &li)
    {
        multiset<int>::const_iterator iter;
        for(iter = li.begin(); iter!= li.end(); iter++)
            cout << *iter << " , ";
        cout << "\n";    
    }
    //display in rorder
    void display_all_r(const multiset<int> &li)
    {
        multiset<int>::const_reverse_iterator riter;
        for(riter = li.rbegin(); riter!= li.rend(); riter++)
            cout << *riter << " , ";
        cout << "\n";    
    }

    int main()
    {
        //default constructor
        multiset<int> c1;
        int ai[] = {0,0,1,1,2,2,3,4};
        //with range
        multiset<int> c2(ai ,ai+8);
        multiset<int> c3(c2);
        multiset<int>::iterator iter;    
        if(c1.empty())
            cout << "multiset c1 is empty \n" ;
        else
            cout << "multiset c1 is NOT empty \n" ;
            
        cout << "c2 (use begin ,end) = ";
        display_all(c2);
        cout << "c2 (use rbegin ,rend) = ";
        display_all_r(c2);
        
        c1.insert(ai, ai+4);
        c1.insert(1);
        cout << "Number elements in c1 that match 1 = " << c1.count(1) << endl;
        
        //find
        multiset<int>::const_iterator citer  = c1.find(3);
        if(citer != c1.end())
            cout <<"c1 contains element3, *citer = "<< *citer << "\n";
        
        cout << "c1.max_size = " << c1.max_size() << "\n";
        
        c1.insert(4);
        c2.swap(c1);
        
        cout<< "The last element of c2 = " << *(c2.rbegin()) << endl;
        
        c1.clear();
        cout << "after clear c1.size = " << c1.size() << endl;
        
        //get_allocator
        multiset<int>::allocator_type a1 = c1.get_allocator();
        
        c2.insert(7);
        c2.insert(8);    
        //key_compare
        multiset<int>::key_compare kc = c2.key_comp();
        bool result = kc(2,3);
        if(result)
            cout << "kc is function object used by c2. kc(2,3) = true \n" ;
        else
            cout << "kc is function object used by c2. kc(2,3) = false \n" ;
        
        //val_compare
        multiset<int>::value_compare vc = c2.value_comp();
        result = vc(12,3);
        if(result)
            cout << "vc is function object used by c2. vc(12,3) = true \n" ;
        else
            cout << "vc is function object used by c2. vc(12,3) = false \n" ;
        
        cout<< "*(c2.upper_bound(4))" << *(c2.upper_bound(4)) << endl;
        cout<< "*(c2.lower_bound(4))" << *(c2.lower_bound(4)) << endl;
        
        pair<multiset<int>::const_iterator , multiset<int>::const_iterator> pr1 = c2.equal_range(3) ;
        cout<< "*(pr1.first) = " << *(pr1.first) << "\t" <<  " *(pr1.second) " <<*(pr1.second) << endl;
        
        if(c3.erase(1)!= 0)
            cout << "c3 does not contain 1 anymore\n";
        else
            cout <<  "No elements in c3 match key 1";
        
        int c2begin = *(c2.begin()) ;
        cout << "*(c2.begin()) = "<< c2begin << endl;
        
        c2.erase(c2.begin());
        c2.count(c2begin);
        //if(( c2.erase(c2.begin())) != c2.end())
        if(c2.count(c2begin) == 0)
            cout << "c2 does not contain "<< c2begin<<" anymore\n";
        else
            cout <<  "No elements in c2 match key " << c2begin;
            
        c3.erase(c3.begin(), c3.end());
        cout << "after c3.erase(c3.begin(), c3.end()) c3.size() = " << c3.size() << "\n";
        
        //set does NOT allow to contain 2 same key
        set<int> si;    
        pair<set<int>::iterator, bool> prs;
        for(int inserttimes = 0; inserttimes < 2; inserttimes ++)
        {
            prs = si.insert(1);
            if(prs.second)//true ----it was actully insert
                cout << "element 1 was insert in s1 successfully" << endl;
            else
                cout << "element 1 already exists in c1 and *(prs.first) = " << *(prs.first) << endl; //first --- point to the element
        }
    }
  • 相关阅读:
    Collaborative Knowledge base Embedding (CKE)
    Multi-Task Feature Learning for Knowledge Graph Enhanced Recommendation(知识图谱)
    解决:install service error: InstallAsEventCreate() failed: xxx registry key already exists
    解决:“由于可能不会将凭据发送到远程计算机,因此将不会进行连接。若要获得协助,请与您的系统管理员联系”
    Asp.Net Core下使用swagger生成api文档
    .NET Core 发布(dotnet publish)
    【.net core 入坑】.net core 3.0 报错:在 FETCH 语句中选项 NEXT 的用法无效
    使用SC命令操作(安装、开启、配置、关闭、删除)Windows下的服务
    asp.net core web应用以windows服务的方式安装运行
    asp.net core 3.0获取web应用的根目录
  • 原文地址:https://www.cnblogs.com/no7dw/p/2494439.html
Copyright © 2011-2022 走看看