鱼C论坛

 找回密码
 立即注册
查看: 2324|回复: 1

[已解决]关于c++的vector中嵌套map

[复制链接]
发表于 2019-3-8 16:44:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int main()
  5. {
  6.     int n, m, k;
  7.     string str;
  8.     vector<map<string, int> > vec;
  9.     cin >> n;
  10.     for(int i = 0; i < n; ++i) {
  11.         cin >> k;
  12.         for(int j = 0; j < k; ++j) {
  13.             cin >> str;
  14.            [color=Red] vec[i][str] = 1;  [/color]  //引起程序卡死的语句
  15.         }
  16.     }
  17.     cin >> m;
  18.     vector<string> s;
  19.     for(int i = 0; i < m; ++i) {
  20.         cin >> str;
  21.         bool flag = false;
  22.         for(int j = 0; j < n; ++j) {
  23.             if(vec[j][str]) {
  24.                 flag = true;
  25.                 break;
  26.             }
  27.         }
  28.         if(!flag) s.push_back(str);
  29.     }
  30.     for(int i = 0; i < s.size() - 1; ++i) cout << s[i] << " ";
  31.     cout << s[s.size() - 1] << endl;
  32.     return 0;
  33. }
复制代码


上述代码:测试用例为:
  1. 3
  2. 3 11111 22222 55555
  3. 2 33333 44444
  4. 4 55555 66666 99999 77777
  5. 8
  6. 55555 44444 10000 88888 22222 11111 23333 88888
复制代码


但是输完第二行程序就因为
  1. vec[i] [str] = 1
复制代码
而卡死,  是不能这样用吗,求dalao指点一下
最佳答案
2019-3-8 17:17:08
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int main()
  5. {
  6.         int n, m, k;
  7.         string str;
  8.         vector<map<string, int> > vec;
  9.         cin >> n;
  10.         for(int i = 0; i < n; ++i) {
  11.                 cin >> k;
  12.                 for(int j = 0; j < k; ++j) {
  13.                         cin >> str;
  14.                         //vec[i][str] = 1;

  15.                         vec.push_back(std::map<std::string, int>{{ str, j}});
  16.                 }
  17.         }
  18.         cin >> m;
  19.         vector<string> s;
  20.         for(int i = 0; i < m; ++i) {
  21.                 cin >> str;
  22.                 bool flag = false;
  23.                 for(int j = 0; j < n; ++j) {
  24.                         if(vec[j][str]) {
  25.                                 flag = true;
  26.                                 break;
  27.                         }
  28.                 }
  29.                 if(!flag) s.push_back(str);
  30.         }
  31.         for(int i = 0; i < s.size() - 1; ++i) cout << s[i] << " ";
  32.         cout << s[s.size() - 1] << endl;
  33.         return 0;
  34. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-3-8 17:17:08 | 显示全部楼层    本楼为最佳答案   
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int main()
  5. {
  6.         int n, m, k;
  7.         string str;
  8.         vector<map<string, int> > vec;
  9.         cin >> n;
  10.         for(int i = 0; i < n; ++i) {
  11.                 cin >> k;
  12.                 for(int j = 0; j < k; ++j) {
  13.                         cin >> str;
  14.                         //vec[i][str] = 1;

  15.                         vec.push_back(std::map<std::string, int>{{ str, j}});
  16.                 }
  17.         }
  18.         cin >> m;
  19.         vector<string> s;
  20.         for(int i = 0; i < m; ++i) {
  21.                 cin >> str;
  22.                 bool flag = false;
  23.                 for(int j = 0; j < n; ++j) {
  24.                         if(vec[j][str]) {
  25.                                 flag = true;
  26.                                 break;
  27.                         }
  28.                 }
  29.                 if(!flag) s.push_back(str);
  30.         }
  31.         for(int i = 0; i < s.size() - 1; ++i) cout << s[i] << " ";
  32.         cout << s[s.size() - 1] << endl;
  33.         return 0;
  34. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 09:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表