zoukankan      html  css  js  c++  java
  • Map,Multimap,Set,MultiSet,Hash_Map,Hash_Set,Share_ptr的区分

    #include <map>
    #include <hash_map>
    #include  <set>
    #include  <hash_set>
    #include <iostream>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    
    class Point
    {
    private:
        float x,y;
    public:
        Point(float x=0,float y=0)
        {
            this->x =x;
            this->y=y;
        }
        void printf()
        {
            cout << this->x  <<" "<< this->y <<endl;
        }
    };
    
     int main( )
    {
        /*Map的底层是用平衡二叉树实现的,迭代器输出的时候是已经有序的*/
        map <int, string> m1;
        map <int, string>::iterator m1_Iter;
        m1.insert ( pair <int, string> ( 11, "OK" ) );
        m1.insert ( pair <int, string> ( 12, "I think" ) );
        m1.insert ( pair <int, string> ( 13, "just do it" ) );
        m1.insert ( pair <int, string> ( 4, "oh no") );
        m1.insert ( pair <int, string> ( 25, "work hard" ) );
        m1.insert ( pair <int, string> ( 6, "funny" ) );
        cout << "The original map m1 is:"<<endl;
        for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
            cout << m1_Iter->first<<" "<<m1_Iter->second<<endl;
    
        m1_Iter=m1.find(13);
        cout << m1_Iter->first<<" "<<m1_Iter->second<<endl;
        m1_Iter=m1.find(6);
        cout << m1_Iter->first<<" "<<m1_Iter->second<<endl;
    
        /*Hash_map 是用哈希表来实现的,所以用迭代器输出的时候是无序的*/
        hash_map<int, string>  hash_map1;
        hash_map1.insert(pair<int,string>(67,"Proud"));
        hash_map1.insert(pair<int,string>(16,"understanding"));
        hash_map1.insert(pair<int,string>(26,"tree"));
        hash_map1.insert(pair<int,string>(12,"you are a boy"));
        hash_map<int,string>::iterator hashmap1_Iter;
        for(hashmap1_Iter=hash_map1.begin();hashmap1_Iter!=hash_map1.end();hashmap1_Iter++)
            cout << hashmap1_Iter->first <<" "<<hashmap1_Iter->second<<endl;
    
        hashmap1_Iter=hash_map1.find(67);
        cout << hashmap1_Iter->first << " " <<hashmap1_Iter->second<<endl;
    
        /*map与multimap不同之处在于map不允许相同的KEY,而multimap允许有相同的KEY,并且实现的数据结构都是平衡二叉树,所以是有序的
        multimap <int, string> mu1;
        multimap <int, string>::iterator mu1_Iter;
        mu1.insert ( pair <int, string> ( 11, "OK" ) );
        mu1.insert ( pair <int, string> ( 12, "I think" ) );
        mu1.insert ( pair <int, string> ( 12, "Good Example" ) );
        mu1.insert ( pair <int, string> ( 13, "just do it" ) );
        mu1.insert ( pair <int, string> ( 4, "oh no") );
        mu1.insert ( pair <int, string> ( 25, "work hard" ) );
        mu1.insert ( pair <int, string> ( 25, "persistance" ) );
        mu1.insert ( pair <int, string> ( 6, "funny" ) );
        cout << "The original map m1 is:"<<endl;
        for ( mu1_Iter = mu1.begin( ); mu1_Iter != mu1.end( ); mu1_Iter++ )
            cout << mu1_Iter->first<<" "<<mu1_Iter->second<<endl;
    
        mu1_Iter=mu1.find(13);
        cout << mu1_Iter->first<<" "<<mu1_Iter->second<<endl;
        mu1_Iter=mu1.find(6);
        cout << mu1_Iter->first<<" "<<mu1_Iter->second<<endl;
    
    
        /*Set使用的数据结构也是平衡二叉树,只有Value*/
        set<string>   s1;
        set<string>::iterator s1_Iter;
        s1.insert(string("orange"));
        s1.insert(string("apple"));
        s1.insert(string("banana"));
        s1.insert(string("fruit"));
        for(s1_Iter=s1.begin();s1_Iter!=s1.end();s1_Iter++)
            cout << *s1_Iter<<endl;
    
        set<string>   s2;
        set<string>::iterator s2_Iter;
        s2.insert(string("orange"));
        s2.insert(string("potato"));
        s2.insert(string("grass"));
        s2.insert(string("fruit"));
        for(s2_Iter=s2.begin();s2_Iter!=s2.end();s2_Iter++)
            cout << *s2_Iter<<endl;
        //支持集合的操作
        string str[10];
        string  *first=str;
        string *end=std::set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),str);
        cout<<endl;
        while(first<end)
            cout<<*first++<<endl;
    
        string str2[10];
        first=str2;
        end=std::set_union(s1.begin(),s1.end(),s2.begin(),s2.end(),str2);
        cout<<endl;
        while(first<end)
            cout<<*first++<<endl;
    
        multiset<string>   ms1;
        multiset<string>::iterator ms1_Iter;
        ms1.insert(string("orange"));
        ms1.insert(string("apple"));
        ms1.insert(string("banana"));
        ms1.insert(string("fruit"));
        ms1.insert(string("orange"));
        ms1.insert(string("apple"));
        ms1.insert(string("banana"));
        ms1.insert(string("fruit"));
        for(ms1_Iter=ms1.begin();ms1_Iter!=ms1.end();ms1_Iter++)
            cout << *ms1_Iter<<endl;
    /*实现的还是哈希表,输出状态无序*/ hash_set
    <string> hs2; hash_set<string>::iterator hs2_Iter; hs2.insert(string("orange")); hs2.insert(string("potato")); hs2.insert(string("grass")); hs2.insert(string("fruit")); cout <<" Hash Set:"<<endl; for(hs2_Iter=hs2.begin();hs2_Iter!=hs2.end();hs2_Iter++) cout << *hs2_Iter<<endl;
    //共享指针管理对象,防范内存泄漏 std::shared_ptr
    <Point> point1(new Point(1.0,1.0)); point1->printf(); }
    Live together,or Die alone!
  • 相关阅读:
    求二维数组的最大子集和
    电梯调度《二》
    电梯调度问题
    BIEE 通过提示器选择展示列(列名接收表示变量)
    BIEE时间序列函数
    Python学习笔记(三)
    Python学习笔记(二)
    Python学习笔记(一)
    BIE前台常用设置
    BIEE 连接BW query query结构 引用
  • 原文地址:https://www.cnblogs.com/hzhida/p/2515467.html
Copyright © 2011-2022 走看看