美文网首页
3.map插入和删除

3.map插入和删除

作者: lxr_ | 来源:发表于2021-04-23 09:55 被阅读0次
    #include<iostream>
    using namespace std;
    
    #include<map>
    #include<vector>
    
    //insert(elem);//在容器中插入元素
    //clear();清除所有元素
    //erase(pos);删除pos迭代器所指的元素,返回下一个元素的迭代器
    //erase(begin, end);删除区间[begin,end]的所有元素,返回下一个元素的迭代器
    //erase(key);删除容器中键值为key的元素
    
    class Speaker
    {
    public:
        Speaker()
        {
    
        }
    
        Speaker(string name)
        {
            this->m_Name = name;
            for (int i = 0; i < 2; i++)
            {
                this->m_Score[i] = 0;
            }
        }
    
        void operator=(const Speaker& s)
        {
            this->m_Name = s.m_Name;
            for (int i = 0; i < 2; i++)
            {
                this->m_Score[i] = s.m_Score[i];
            }
        }
    
        string m_Name;
        double m_Score[2];
    };
    
    void printMap(map<int, int> m)
    {
        for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
        {
            cout << "key:" << it->first << "\t"
                << "value:" << it->second << endl;
        }
        cout << endl;
    }
    void test0301()
    {
        map<int, int> m1;
    
        m1.insert(pair<int, int>(1, 10));//第一种插入
    
        m1.insert(make_pair(2, 20));//第二种插入
    
        m1.insert(map<int, int>::value_type(3, 30));//第三种插入
    
        m1[4] = 40;//第四种插入,不建议,可以利用key访问到value    
        //如果map存自定义类型的数据,并使用map[key]=value访问,必须包含自定义类型数据的默认构造函数,否则访问时若键值key不存在,需要调用默认构造函数创建自定义对象添加到map容器中
    
        cout << m1[5] << endl;//本来想访问m[5],但是会自动添加m[5]=0到map中,故不建议使用
    
        printMap(m1);
    
        cout << m1[4] << endl;
    
        //删除
        m1.erase(m1.begin());
        printMap(m1);
    
    
        m1.erase(3);//按照key删除
        printMap(m1);
    
        m1.erase(m1.begin(), m1.end());//相当于清空
        printMap(m1);
    
        m1.clear();//清空所有数据
        printMap(m1);
        
    }
    //如果map存自定义类型的数据,并使用map[key]=value访问,必须包含自定义类型数据的默认构造函数,
    //否则访问时若键值key不存在,需要调用默认构造函数创建自定义对象添加到map容器中,
    //如果自己提供了有参或者拷贝构造函数,则C++不会提供默认构造函数,需要自己提供
    void test0302()
    {
        vector<int> v;
    
        v.push_back(1);
        v.push_back(2);
        v.push_back(3);
    
    
        map<int, Speaker> m;
    
        Speaker s1("xian");
        Speaker s2("si");
        Speaker s3("fan");
    
        m.insert(make_pair(1, s1));
        m.insert(make_pair(2, s2));
        m.insert(make_pair(3, s3));
    
        for (map<int, Speaker>::iterator it = m.begin(); it != m.end(); it++)
        {
            cout << "编号:" << it->first << "\t" << "姓名:" << it->second.m_Name << "\t" << "分数:" << it->second.m_Score[0]+it->second.m_Score[1] << endl;
        }
    
        //自己提供了有参构造,若没有提供默认构造则会出错
        for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
        {
            cout << "编号:" <<*it << "\t" << "姓名:" << m[*it].m_Name << "\t" << "分数:" << m[*it].m_Score[0] + m[*it].m_Score[1] << endl;
        }
    }
    int main()
    {
        //test0301();
    
        test0302();
    
        system("pause");
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:3.map插入和删除

          本文链接:https://www.haomeiwen.com/subject/rdpxrltx.html