zoukankan      html  css  js  c++  java
  • STL应用 map HDU 3527

    HDU 3527 https://vjudge.net/problem/HDU-3527
    继续上一题 这题还可以使用map解答

    map 是一个将独一无二的键值与数值对应的数据结构,方便查找。
    c++ stl中的map实现是树结构,所以存储的键值是有次序的排列。
    还有另一种键值与数值对应的数据结构 unordered_map,使用的是哈希表,查找效率更高,但是存储的键值是无序排列。

    常用的类函数如下:
    operator[]
    begin() end()
    empty()
    clear()
    insert()
    erase()
    swap()
    count()
    find()

    我们再来看看题目

    题目的大意就是有三份名单,一份是所有旅客,一份是A间谍名单,一份是B间谍名单。
    要求 我们找出现在A名单上但是未出现在B名单上的的旅客间谍(也就是同时还出现在第一份名单上)。
    
    输入格式
    第一行三个数字 空格隔开 表示三份名单的长度 A B C
    第二行有A个名字 空格隔开
    第三行有B个名字 空格隔开
    第四行有C个名字 空格隔开
    
    输出格式
    输出一样 输出答案名字 空格隔开
    
    Sample Input
    8 4 3
    Zhao Qian Sun Li Zhou Wu Zheng Wang
    Zhao Qian Sun Li
    Zhao Zhou Zheng
    2 2 2
    Zhao Qian
    Zhao Qian
    Zhao Qian
    
    Sample Output
    Qian Sun Li
    No enemy spy
    

    使用map解答
    我们使用3个map记录旅客 A间谍 B间谍名单
    然后将A间谍名单中所有名字 依次检查是否存在在旅客名单但是不在B间谍名单中。
    符合条件就放入答案中 然后输出。
    由于结构设计的优势,map在查找上胜出vector一筹,速度会更快。

    代码如下

    
    #include <iostream>
    #include <map>
    #include <vector>
    #include <string>
    
     
    
    using namespace std;
    
    
    int a, b, c;
    
    int main() {
    	while (cin >> a >> b >> c) {
    		map<string, int> vis;
    		vector<string> A;//因为答案输出要求按照名单次序 所以这里不能使用map,会改变次序
    		map<string, int> B;
    		string s;
    		for (int i = 0; i < a; i++) {
    			cin >> s; vis[s]++;
    		}
    		for (int i = 0; i < b; i++) {
    			cin >> s; A.push_back(s);
    		}
    		for (int i = 0; i < c; i++) {
    			cin >> s; B[s]++;
    		}
    		vector<string> ans;
    		vector<string>::iterator it = A.begin();
    		for (it = A.begin(); it != A.end(); it++) {
    			if (vis.count(*it) != 0 &&
    				B.find(*it) == B.end())
    			{
    				ans.push_back(*it);
    			}
    		}
    
    		if (ans.empty()) {
    			cout << "No enemy spy";
    		}
    		else {
    			for (int i = 0; i < ans.size(); i++) {
    				cout << ans[i];
    				if (i != ans.size() - 1) {
    					cout << " ";
    				}
    			}
    		}
    		cout << endl;
    	}
    
    	return 0;
    }
    
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    Javascript 基础知识整理
    设计模式
    Flex 布局
    CSS选择器,属性前缀,长度单位,变形效果,过渡效果,动画效果
    CSS中一些重要概念
    性能优化(CSS优化)
    CSS定位走一波(定位学习续)
    定位布局
    浮动布局
    Display属性学习总结
  • 原文地址:https://www.cnblogs.com/itdef/p/15083600.html
Copyright © 2011-2022 走看看