#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;
}
网友评论