美文网首页
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