zoukankan      html  css  js  c++  java
  • STL之map

    Map原理简单理解:

    通过一种特殊的红黑树(自平衡的二叉查找树),由于红黑树也是二叉查找树,它们当中每一个节点都的比较值都必须大于或等于在它的左子树中的所有节点,并且小于或等于在它的右子树中的所有节点。这确保红黑树运作时能够快速的在树中查找给定的值。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。

    ps:这里我对红黑树暂时无法深入学习理解,只能是浅看,明白用法。

    Map基本操作:

    1.map<int ,string> a; map<string,int>;支持多种类

    2.添加数据:map1.insert(pair<int,string>(102,"wobeitianjia"));map1.insert(map<int,string>::value_type(102,"tianjia"));map1[102]="string";

    3.元素查找:map1.find(key) 返回一个迭代器指向键值为key的元素,如果没有找到,返回指向map尾部的迭代器

    4.元素删除:先查找元素,map<int ,string>::iterator it=map1.find(key); 找到之后map1.erase(it);

    5.map中的swap函数,交换的是两个容器而不是一个容器中的元素交换

    6.sort函数,因为map中key按照升序进行排列的,所以不能使用sort函数

    引用代码:

    #pragma warning(disable:4786)
    
    #include <iostream>
    #include <string>
    #include <map>
    
    using namespace std;
    
    int main()
    {
        /*
        map<int,string> tmp;
        map<int,string>::const_iterator iter1,iter2;
        tmp.insert(pair<int,string>(54090104,"Bob"));
        tmp.insert(pair<int,string>(54090105,"Ben"));
        iter1 = tmp.begin();
        iter2 = tmp.end();
        */
        map<int,string> studentMessage;
        map<int,string>::iterator iter;
        //向map中插入数据
        studentMessage.insert(pair<int,string>(54090101,"Mike"));
        studentMessage.insert(pair<int,string>(54090101,"MIKE"));//重复插入
        studentMessage.insert(map<int,string>::value_type(54090102,"Sam"));
        studentMessage.insert(map<int,string>::value_type(54090102,"SAM"));//重复插入
        studentMessage[54090103] = "Jake";
        studentMessage[54090103] = "JAKE";//重复插入
    
        //为了测试删除,先插入两个数据,看插入结果主要看上面的插入方式
        studentMessage[54090104] = "Bob";
        studentMessage[54090105] = "Ben";
    
        cout<<"完成插入后map中的数据:"<<endl;
        for(iter = studentMessage.begin() ; iter != studentMessage.end() ; ++iter)
        {
            cout<<iter->first<<" "<<iter->second<<endl;
        }
    
        //从map中删除数据
        iter = studentMessage.begin();
        studentMessage.erase(iter);
        cout<<"利用迭代器删除map中第一个元素:"<<endl;
        for(iter = studentMessage.begin() ; iter != studentMessage.end() ; ++iter)
        {
            cout<<iter->first<<" "<<iter->second<<endl;
        }
        studentMessage.erase(54090102);
        cout<<"利用键值删除map中的第一个元素:"<<endl;
        for(iter = studentMessage.begin() ; iter != studentMessage.end() ; ++iter)
        {
            cout<<iter->first<<" "<<iter->second<<endl;
        }
        studentMessage.erase(studentMessage.begin(),studentMessage.end());
        cout<<"利用范围迭代器删除map中的所有数据:"<<endl;
        for(iter = studentMessage.begin() ; iter != studentMessage.end() ; ++iter)
        {
            cout<<iter->first<<" "<<iter->second<<endl;
        }
        return 0;
    }
    

    引用博客链接

  • 相关阅读:
    free
    Lynyrd Skynyrd
    Tree 园丁的烦恼
    On Changing Tree
    Path Queries
    Java开发中的23种设计模式详解(转)
    cas单点登录实现
    Java内存溢出详解
    java多线程并发
    java代码实现图片处理功能。对图片质量进行压缩。
  • 原文地址:https://www.cnblogs.com/heihuifei/p/7828892.html
Copyright © 2011-2022 走看看