`
kettleking
  • 浏览: 18404 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C++ Map详解

阅读更多
• map定义类型
/*
     1. map对象的元素是键值对,也就是每个元素包含两个部分:键以及由键关联的值。
     键的类型必须是可以比较的,但键类型是自定义类型时,必须重写比较函数:
     inline bool compare(const keytype &key,const keytype &key)
     2. map对象的键是不可修改的,值可以;用map迭代器进行解引用将产生pair类型的对象,
     实际上,迭代器是一个指向pair的引用
     */
    map<string ,int > test1;

    test1["hello"] = 1;
    test1["world"] = 2;
    
    map<string, int>::iterator it1 = test1.begin();
    map<string, int>::iterator it2 = test1.end();

    /*
     创建test3,test3中存储迭代器it1,到it3之间的所有元素副本。
     */
    map<string, int>test3(it1,it2);
    map<string, int>::iterator it3 = test3.begin();
    while (it3 != test3.end()) 
    {
        /*map对象的值域是可以修改的*/
        it3->second = 3;
        cout << it3->first << ", " << it3->second << endl;
        it3++;
    }

• map添加元素
/**
     * 1. 使用下标访问map对象
     *  首先,将键“feigo”及一个默认初始化的值作为一个新键值对插入到test4中。
     *  然后,读取新插入的元素,并将它的值赋值为4;
     *  若test4中已经存在该元素,则将该元素值赋值为4.
     */
    map<string , int > test4;
    test4["feigo"] = 4; 
 

/**
     * 2. map::insert的使用
     */
    /**
     *  • m.insert(e) e是一个m上的value_type类型的值。如果e.first不在m中,则插入e,否则,则保持m不变。
     *    该函数返回一个pair类型对象,包含指向键为e.first的元素的map迭代器,以及一个bool类型的对象,表示 是否插入该元素
     */
    map<string , int > test5;
    test5.insert(make_pair("Anna", 5)); // 也可以test5.insert(map<string, int>::value_type("Anna", 5));
    pair< map<string , int >::iterator, bool> resul =  test5.insert(make_pair("Anna", 5));
    map<string , int >::iterator it = resul.first;
    bool isInsert = resul.second;
    

    /**
     *  • m.insert(beg,end) beg,end是某个map对象的迭代器;对于从beg,到end范围内的所有元素,如果它的键在m中不存在,则
     *    插入到m中。
     */
    test5.insert(it1,it2);
    map<string, int>::iterator it5 = test5.begin();
    while (it5 != test5.end()) 
    {
        cout << it5->first << ", " << it5->second << endl;
        it5++;
    } 

/**
     *  • m.insert(iter, e) e是一个中m上的value_type类型值。如果键(e.first)不在m中,则创建新元素,并以迭代器iter为起点
     *    搜索新元素存储的位置。返回一个迭代器,指向m中具有给定键的元素。
     */
    map<string,int>::iterator it6 = test5.begin();
    map<string,int>::iterator it7 = test5.insert(it6,make_pair("Anna", 5));
    cout << "anna : " << it7->first << ", " << it7->second << endl;

/*
     * 3. 查找并读取map中的元素
     */
   
    /*
     * •  m.count(k) 返回m中k的出现次数,对于map对象,其返回值只能是0或者1.
     *    如果返回值非0,则可以使用下标操作符来获取该键所关联的值,而不用担心这样做会中map中插入新元素          
     */
    if(test5.count("Anna"))
    {
        cout << test5["Anna"] << endl;
    }
    

    /*
     * •  m.find(k) 如果m容器中存在按k键索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端迭代器。
     *    和count相比,find只查找了一次,而count查找了两次
     */
    map<string,int>::iterator it8 = test5.find("Anna");
    if(it8 != test5.end())
    {
        cout << it8->second << endl;
    }

/*
     * 4.  从map对象中删除元素
     */
   
    /*
     * •  m.erase(k) 删除m中键为k的元素。返回size_type类型的值,表示删除的元素个数。非0即1,不解释。
     */
    if (test5.erase("Anna")) 
    {
        it8 = test5.begin();
        while (it8 != test5.end()) 
        {
            cout << it8->first << ", " << it8->second << endl;
            it8++;
        }
    }
  
 
    /*
     * •  m.erase(p) 删除m中迭代器所指向的元素。p必须指向m中确实存在的元素,而且不能等于m.end()。否则程序中运行时出错。
     */
    map<string,int>::iterator it9 = test5.find("Anna");
    test5.erase(it9);  //运行至此挂了
    it9 = test5.begin();
    while (it9 != test5.end())
    {
        cout << it9->first << ", " << it9->second << endl;
        it9++; 
    }
   

    /*
     * •  m.erase(b,e) 删除m中迭代器b,e之间的元素。b,e必须标示m中的一段有效范围。不然:运行时挂!
     */
    map<string,int>::iterator it10 = test5.begin();
    map<string,int>::iterator it11 = test5.end();
    test5.erase(it10,it11);
    cout << endl;
    while (it10 != test5.end())
    {
        cout << it10->first << ", " << it10->second << endl;
        it10++; 
    }
分享到:
评论

相关推荐

    c++ map详解

    C++ Map 详解 C++ 的 STL 中提供了一个非常有用的容器类,即 map,它是一种关联容器,可以提供一对一的数据处理能力。Map 的特性是每个关键字只能在容器中出现一次,而每个关键字对应一个值。这种特性使得 map 在...

    C++ map详解

    C++中的`map`是一个关联容器,它存储键值对(key-value pairs),其中每个键都是唯一的。`map`在内部实现为红黑树(Red-Black Tree),保证了其插入、查找和删除操作的时间复杂度为O(log n)。在C++标准库中,`map`...

    hash_map的详解

    ### hash_map详解 #### 0. 为什么需要hash_map? 在软件开发中,经常会遇到需要高效存储和查找键值对(key-value)的情况。例如,在管理人物名称及其相关信息时,我们希望能够快速地添加、查找和更新数据。传统的...

    C++_map的基本操作和使用

    C++ 中 Map 的基本操作和使用 Map 是 C++ 中的一个标准容器,它提供了一对一的关系,在一些程序中建立一个 Map 可以起到事半功倍的效果。下面总结了一些 Map 的基本操作和使用。 Map 简介 Map 是一种关联式容器。...

    Visual C++ 编程详解

    此外,书中还会详细讨论STL(Standard Template Library,标准模板库),这是C++中的一组高效、泛型的容器(如vector、list和map)、算法和迭代器。STL的使用极大地提高了代码的复用性和效率,是现代C++编程不可或缺...

    stl中map用法详解

    STL(Standard Template Library,...熟练掌握`map`的用法,能极大地提升C++编程的效率和代码质量。通过了解插入、查找、更新、删除等基本操作以及遍历和查找辅助函数,开发者可以充分利用`map`的特性来解决实际问题。

    C++STL详解PPT

    C++STL详解 C++STL 库是 C++ 语言中非常重要的一部分,它提供了许多有用的容器、算法和迭代器,帮助开发者更方便地编写高效、可重用的代码。 泛型程序设计是 C++ 语言中非常重要的一部分,它允许开发者编写通用的...

    C++语言命令详解

    由于直接提供给定文件的具体内容是不可能的,我将基于文件标题“C++语言命令详解”和标签“C++”,根据我的知识库生成一个详细的知识点说明,以符合您的要求。 C++是一种由Bjarne Stroustrup于1980年代初期在贝尔...

    STL中map用法详解

    通过理解这些基本概念和操作,你可以有效地在C++项目中利用`map`容器来管理和操作数据。结合模板知识,`map`能帮助你构建更高效、更灵活的代码。在实践中,根据具体需求选择`map`或`unordered_map`,并充分利用其...

    Think in c++编程详解

    《Think in C++编程详解》是一本旨在帮助读者从初级水平逐步提升至高阶的C++编程指南。这本书深入浅出地介绍了C++语言的核心概念和技术,结合作者多年的编程实践经验,为学习者提供了丰富的知识与实用技巧。 首先,...

    C++学习资源详解

    C++的学习资源详解将涵盖以下几个关键知识点: 1. **基础语法**:C++的基础包括数据类型(如int, float, char等)、变量声明、运算符、流程控制(如if语句、for循环、while循环)以及函数的使用。理解这些基本概念...

    STL中map用法详解 STL中map用法详解 STL中map用法详解

    STL(Standard Template ...通过理解并熟练运用这些知识点,开发者可以在C++项目中有效地利用map来管理和操作数据。记住,map的效率得益于其内部的红黑树实现,可以保证插入、查找和删除操作的时间复杂度为O(log n)。

    基于C++ map中key使用指针问题的详解

    C++实际开发的过程会经常使用到map。map是一个key-value值对,key唯一,可以用find进行快速的查找。其时间复杂度为O(logN),如果采用for循环进行遍历数据时间复杂度为O(N)。如果map中的数据量比较少时,采用find和...

    很好用的《C++实例详解》

    7. **STL**:标准模板库包括容器(如vector、list、map等)、算法和迭代器,极大地丰富了C++的功能,降低了编程复杂性。 在《C++实例详解》中,每个主题都会通过详细的步骤和注释解释,引导读者逐步实现并理解代码...

    C++如何删除map容器中指定值的元素详解

    大家都知道map容器是C++ STL中的重要一员,平时会遇到删除map容器中value为指定元素的问题,例如删除所有字符串为”123″或者能整除3的元素。 一、map容器下的方法说明 由于map容器下的方法较多,这里只列举代码中用...

    STL中的map用法详解.rar

    在C++编程语言中,STL(Standard ...了解并熟练运用这些知识点,能够帮助开发者更好地利用C++的`map`容器,提高代码效率和可读性。在实际编程中,根据具体需求选择合适的数据结构和操作,是提升程序性能的关键。

    《Visual C++精彩实例详解》随书光盘

    《Visual C++精彩实例详解》随书光盘包含了大量的学习资源,旨在帮助读者深入理解和熟练掌握Visual C++编程技术。这本书籍的光盘内容可能涵盖了从基础到高级的各种实例,覆盖了C++语言的核心概念、MFC(Microsoft ...

Global site tag (gtag.js) - Google Analytics