

1
要求: 將mymap中itemstruct 的a大于100的項刪除
2
struct itemstruct
3

{
4
int a;
5
char b[20];
6
};
7
map<string, itemstruct > mymap.
8
9
解答1:
10
#include <iostream>
11
#include <ctime>
12
#include <map>
13
using namespace std;
14
typedef struct itemstruct
15

{
16
int a;
17
char b[20];
18
}itemS;
19
itemS s[4] =
{
{102,"what"},
20

{33, "hello"},
21

{198,"world"},
22

{45, "c++"}
23
};;
24
25
26
int main()
27

{
28
map<string, itemS> mymap;
29
string str[4] =
{"1st","2nd","3rd","4th"};
30
for(int i = 0; i<4; i++)
31

{
32
mymap.insert(make_pair(str[i], s[i]));
33
}
34
35
map<string,itemS>::iterator it;
36
for(it=mymap.begin(); it!=mymap.end(); it++)
37

{
38
if(it->second.a >100)
{
39
i=mymap.erase(it); ----->正確
40
mymap.erase(it); ----->it失效..
41
}
42
}
43
//first是Key, second是value;
44
for(it = mymap.begin(); it!=mymap.end(); it++)
45

{
46
cout<<it->first<<" "<<it->second.a<<" "<<it->second.b<<endl;
47
}
48
system("pause");
49
return 0;
50
}
51
52
解答2:
53
#include<map>
54
#include<iterator>
55
#include<string>
56
#include<iostream>
57
#include<cstring>
58
using namespace std;
59
struct itemstruct
60

{
61
int a;
62
char b[20];
63
itemstruct(int t,char*str)
64

{
65
a=t;
66
strcpy(b,str);
67
}
68
};
69
int main()
70

{
71
map<string,itemstruct>mymap;
72
mymap.insert(make_pair("a",itemstruct(10,"hanzhou")));
73
mymap.insert(make_pair("ab",itemstruct(20,"fuzhou")));
74
mymap.insert(make_pair("abc",itemstruct(30,"zhengzhou")));
75
mymap.insert(make_pair("abcd",itemstruct(200,"wuhan")));
76
mymap.insert(make_pair("abcde",itemstruct(150,"kunming")));
77
mymap.insert(make_pair("abcdef",itemstruct(50,"xiamen")));
78
map<string,itemstruct>::iterator it=mymap.begin();
79
while(it!=mymap.end())
80

{
81
if((it->second).a>100)mymap.erase(it++);
82
else it++;
83
}
84
it=mymap.begin();
85
while(it!=mymap.end())
86

{
87
cout<<it->first<<" "<<(it->second).a<<" "<<(it->second).b<<endl;
88
it++;
89
}
90
system("PAUSE");
91
return 0;
92
}
93
94
解答3:
95
for(map<string, itemstruct>::iterator i = mymap.begin(); i != mymap.end();)
96

{
97
if(i->second.a > 100)
98
i = mymap.erase(i);
99
else
100
++i;
101
}
102
103
解答4: VC6中編譯map編譯出錯的解決方法
104
Warnings similar to the following are generated even if you use the warning pragma to disable the warning: warning C4786: 'std::rb_tree<CAiSpanningTree<State,std::less<State>>::TransClosureNode, CAiSpanningTree<State,std::less<State>>::TransClosureNode,std::ident<Cai SpanningTree<State,std::less<State>>::TransClosureNode,CAiSpanningTree<S tate,std::less<State>>::TransClosureNode>,std::less<CAiSpanningTree<Stat e,std::less<State>>::TransClosureNode>>' : identifier was truncated to '255' characters in the debug information
105
106
107
解決code 加在stdafx.h的頭文件處:
108
109
#pragma warning(disable:4786)
110
C++中map容器提供一個鍵值對容器,map與multimap差別僅僅在于multiple允許一個鍵對應多個值。
1
#include <iostream>
2
#include <iomanip>
3
#include <string>
4
#include <map>
5
using namespace std;
6
int main()
7

{
8
map<string,int> m;
9
int n; cin>>n;
10
string s;
11
int x;
12
for (int i=1;i<=n;i++)
13

{
14
cin>>s>>x;
15
m[s]=x;
16
}
17
int k;
18
cin>>k;
19
for (int i=1;i<=k;i++)
20

{
21
cin>>s;
22
cout<<m[s]<<endl;
23
}
24
return 0;
25
}
26
27
28
一、map的說明
29
1 頭文件
30
#include <map>
31
32
2 定義
33
map<string, int> my_Map;
34
或者是typedef map<string, int> MY_MAP;
35
MY_MAP my_Map;
36
37
3 插入數據
38
(1) my_Map["a"] = 1;
39
(2) my_Map.insert(map<string, int>::value_type("b",2));
40
(3) my_Map.insert(pair<string,int>("c",3));
41
(4) my_Map.insert(make_pair<string,int>("d",4));
42
43
4 查找數據和修改數據
44
(1) int i = my_Map["a"];
45
my_Map["a"] = i;
46
(2) MY_MAP::iterator my_Itr;
47
my_Itr.find("b");
48
int j = my_Itr->second;
49
my_Itr->second = j;
50
不過注意,鍵本身是不能被修改的,除非刪除。
51
52
5 刪除數據
53
(1) my_Map.erase(my_Itr);
54
(2) my_Map.erase("c");
55
還是注意,第一種情況在迭代期間是不能被刪除的,道理和foreach時不能刪除元素一樣。
56
57
6 迭代數據
58
for (my_Itr=my_Map.begin(); my_Itr!=my_Map.end(); ++my_Itr)
{}
59
60
7 其它方法
61
my_Map.size() 返回元素數目
62
my_Map.empty() 判斷是否為空
63
my_Map.clear() 清空所有元素
64
可以直接進行賦值和比較:=, >, >=, <, <=, != 等等
65
66
更高級的應用查幫助去吧,^_^;
posted on 2009-11-23 00:33
納蘭伴月 閱讀(640)
評論(0) 編輯 收藏 引用