概述:一是使用容器的insert函数插入元素,使用迭代器访问元素,该方法是最通用的做法,适用于各种元素类型;二是使用[]插入和访问元素,要求元素必须是可默认构造的。
一、使用insert()插入,使用迭代器访问
#include <iostream>
#include "unordered_map"
using namespace std;
struct student {
string name;
string sex;
int age;
student (string s1, string s2, int i) {
name = s1;
sex = s2;
age = i;
}
};
int main() {
int N;
while (cin >> N) { // 注意 while 处理多个 case
// cout << a + b << endl;
unordered_map <int, student> myMap;
while (N--) {
int num;
string name;
string sex;
int age;
cin >> num >> name >> sex >> age;
myMap.insert(pair<int,student>(num,student(name, sex, age))) ;
}
int M;
cin >> M;
while (M--) {
int num;
cin >> num;
if (myMap.find(num) == myMap.end())
cout << "No Answer!" << endl;
else {
student result = myMap.find(num)->second;
cout << num << ' ' << result.name << ' ' << result.sex << ' ' << result.age <<
endl;
}
}
}
}
// 64 位输出请用 printf("%lld")
二、使用[]插入和访问元素,需要注意的是此时元素必须是可默认构造的,什么是默认可构造呢?简单理解就是不能有构造函数,显然结构体是可默认构造的。那么如何针对上文中的student结构体类型实现下标访问呢,看如下代码:
#include <iostream>
#include "unordered_map"
using namespace std;
struct student {
string name;
string sex;
int age;
};
int main() {
int N;
while (cin >> N) { // 注意 while 处理多个 case
// cout << a + b << endl;
unordered_map <int, student> myMap;
while (N--) {
int num;
string name;
string sex;
int age;
cin >> num >> name >> sex >> age;
// myMap.insert(pair<int,student>(num,student(name, sex, age))) ;
student temp;
temp.name=name;
temp.age=age;
temp.sex=sex;
myMap[num]=temp;
}
int M;
cin >> M;
while (M--) {
int num;
cin >> num;
if (myMap.find(num) == myMap.end())
cout << "No Answer!" << endl;
else {
student result = myMap[num];
cout << num << ' ' << result.name << ' ' << result.sex << ' ' << result.age <<
endl;
}
}
}
}
// 64 位输出请用 printf("%lld")