目录
一、Vector容器:
二、Queue队列
三、Map映射
四、题目(快递分拣 vector):
代码:
五、题目(CLZ银行问题 queue):
代码:
六、题目(费里的语言 map):
代码:
一、Vector容器:
Vector
的主要作用就是可变长度的数组,就把他当成数组使用即可。
#include <vector> //头文件
vector<int> a; //定义了一个int类型的vector容器a
vector<int> b[100]; //定义了一个int类型的vector容器b 相当于二维数组
struct rec
{
···
};
vector<rec> c; //定义了一个rec类型的vector容器c
a.size() //返回实际长度(元素个数),O(1)复杂度
a.empty() //容器为空返回1,否则返回0,O(1)复杂度
a.clear() //把vector清空
a.begin() //返回指向第一个元素的迭代器,*a.begin()与a[0]作用相同
a.end() //越界访问,指向vector尾部,指向第n个元素再往后的边界
a.front() //返回第一个元素的值,等价于*a.begin和a[0]
a.back() //返回最后一个元素的值,等价于*--a.end()和a[size()-1]
a.push_back(x) //把元素x插入vector尾部
a.pop_back() //删除vector中最后一个元素
//遍历的方法一:
for ( vector<int>::iterator it=a.begin() ; it!=a.end() ; it++ )
cout<<*iterator<<endl;
//遍历的方法二:
for( int i=0;i<a.size();i++) cout<<a[i]<<endl;
二、Queue队列
queue<string> myqueue;
queue<int> myqueue_int;
front()://返回 queue 中第一个元素的引用。
back()://返回 queue 中最后一个元素的引用。
push(const T& obj)://在 queue 的尾部添加一个元素的副本。
pop()://删除 queue 中的第一个元素。
size()://返回 queue 中元素的个数。
empty()://如果 queue 中没有元素的话,返回 true。
三、Map映射
map
是一个关联容器,它提供一对一的hash
。
- 第一个可以称为关键字(
key
),每个关键字只能在map
中出现一次- 第二个可能称为该关键字的值(
value
)
map<char, int> mymap1;
map<string, int> mymap2;
int map.size();//查询map中有多少对元素
bool empty();// 查询map是否为空
插入: map.insert(make_pair(key,value));
//或者
map.insert(pair<char, int>(key, value))
//或者
map[key]=value
取值;map<int, string> map;
//如果map中没有关键字2233,使用[]取值会导致插入
//因此,下面语句不会报错,但会使得输出结果结果为空
cout<<map[2233]<<endl;
//但是使用at会进行关键字检查,因此下面语句会报错
map.at(2016) = "Bob";
遍历:
map<string, string>::iterator it;
for (it = mapSet.begin(); it != mapSet.end(); ++it)
{
cout << "key" << it->first << endl;
cout << "value" << it->second << endl;
}
查找:
m.count(key)://由于map不包含重复的key,因此m.count(key)取值为0,或者1,表示是否包含。
m.find(key)://返回迭代器,判断是否存在。
四、题目(快递分拣 vector):
代码:
#include<iostream>
#include<vector>
using namespace std;
vector<string> city;
vector<string> nums[1010];
int n;
int Find(string name)
{
for (int i = 0; i < city.size(); i++)
{
if (city[i] == name)//找到该城市
return i;//返回该城市的所属nums的vector里
}
return -1;
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
string num1, name1;
cin >> num1 >> name1;
if (Find(name1)== -1)//找不到该城市名
{
city.push_back(name1);//新添城市名
nums[city.size() - 1].push_back(num1);//将号码存到新城市所属nums的vector里
}
else//找到该城市名
{
nums[Find(name1)].push_back(num1);//将该号码存到该城市所属nums的vector里
}
}
for (int i = 0; i < city.size(); i++)
{
cout << city[i] << " " << nums[i].size() << endl;//输出城市,输出城市有的号码个数
for (int j = 0; j < nums[i].size(); j++)
{
cout << nums[i][j] << endl;//输出城市有的号码
}
}
}
五、题目(CLZ银行问题 queue):
代码:
#include<iostream>
#include<queue>
using namespace std;
queue<string> vip;
queue<string> no_vip;
int main()
{
int m;
cin >> m;
while (m--)
{
string s,name,choice;
cin >> s;
if (s == "IN")//入队
{
cin >> name >> choice;
if (choice == "V")//入vip队列
vip.push(name);
else//否则入普通队列
no_vip.push(name);
}
else
{
cin >> choice;
if (choice == "V")//vip队列出队
vip.pop();
else//普通队列出队
no_vip.pop();
}
}
while (vip.size())//输出vip队列
{
cout << vip.front() << endl;
vip.pop();
}
while (no_vip.size())//输出普通队列
{
cout << no_vip.front() << endl;
no_vip.pop();
}
}
六、题目(费里的语言 map):
代码:
#include<iostream>
#include<map>
using namespace std;
int main()
{
int n;
string ans = "NO";
map<string, bool> mp;
cin >> n;
for (int i = 0; i < n; i++)
{
string word;
cin >> word;
if (mp.count(word))//不为0说明已经有了,记录答案并跳出
{
ans = word;
break;
}
else
mp[word]=1;//没有,则将其加入,标为1
}
cout << ans;
}