欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Multimap的遍历和删除(很重要)

发布时间:2025/4/16 编程问答 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Multimap的遍历和删除(很重要) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

c++STL容器中Multimap可允许重复键值元素插入容器,但在遍历的时候出现了一些问题。今天要把他解决掉

 

第一元素是键值,不能修改。第二元素是实值,可以修改。

键值key与元素value的映照关系是多对多的关系,没有定义[ ]操作运算

map中的所有元素都是pair

 

#include<cstdio> #include<iostream> #include<string> #include<map>using namespace std;struct student{char name[10];int age;char city[10];char phone[10]; };int main() {student s[] = {{"魏晶", 21, "兰州", "xxx"},{"郭亨宁", 21, "太原", "xxx"},{"马瑞敏", 21, "忻州", "xxx"},{"女", 45, "太原", "xxx"}};pair<int, student>p1(4, s[0]);pair<int, student>p2(2, s[1]);pair<int, student>p3(3, s[2]);pair<int, student>p4(4, s[3]);multimap<int, student>mm;mm.insert(p1);mm.insert(p2);mm.insert(p3);mm.insert(p4);//遍历********我就是这块不会/*typedef multimap<int, student>::iterator it;pair<it, it>p;for(it i = p.first; i != p.second; i++){cout << i -> second.name << endl;}*/for(multimap<int, student>::iterator it = mm.begin(); it != mm.end(); it++){cout << (*it).first << " " << it->second.name << " " << it->second.age << " " << it->second.city << " " << it->second.phone << endl;} }

 

 

自己应用了一下:

#include<cstdio> #include<iostream> #include<map> #include<algorithm>using namespace std;const int maxn = 1e5;int main() {int n;scanf("%d", &n);multimap<int, string>mm;for(int i = 0; i < n; i++){string s; cin >> s;int k; cin >> k;mm.insert(make_pair(k, s));}multimap<int, string>::iterator it;cout << endl;for(it = mm.begin(); it != mm.end(); it++){cout << (*it).first << " " << (*it).second << endl;} }/*测试数据: 10 jfdl 1 dffd 2 fsd 3 ddf 10 dfdf 0 dffd 2 dgfd 6 dgf 3 sdfgd 8 dfds 90 dfdf 1 jfdl 2 dffd 2 dffd 3 fsd 3 dgf 6 dgfd 8 sdfgd 9 dfds 10 ddf*/

 

一道可以用到multimap存储,遍历,删除操作的题目。终于了解啦

C. Alphabetic Removals (cf)

附代码:

#include<cstdio> #include<iostream> #include<cstring> #include<string> #include<vector> #include<algorithm> #include<set> #include<map>using namespace std;const int maxn = 4*1e5+5; char arr[maxn]; char result[maxn];int main() {int n, k;scanf("%d%d", &n, &k);string s; cin >> s;if(n <= k) return 0;multimap<char, int>mm;for(int i = 0; i < n; i++){mm.insert(make_pair(s[i], i));}multimap<char, int>::iterator it, it1;for(it = mm.begin(); it != mm.end(); ){mm.erase(it++); //multimap的删除操作,注意 k--;if(k == 0) break; }for(it = mm.begin(); it != mm.end(); it++){arr[(*it).second] = (*it).first;}int cnt = 0;for(int i = 0; i < n; i++){if(arr[i] >= 'a'&&arr[i] <= 'z'){result[cnt++] = arr[i];}}for(int i = 0; i < cnt; i++) cout << result[i]; printf("\n");return 0; }

 

总结

以上是生活随笔为你收集整理的Multimap的遍历和删除(很重要)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。