如何给map<string,map<int,vector<int> > >a;中的a 进行各个部分的赋值,填充内容操作? 20
我的意思就是说,我已经定义了a,但我想往a里面放东西,这个东西包括了第一个string、和第二个map容器,其中里面的那个map容器内又必须添加内容;我需要得到这个操作的...
我的意思就是说,我已经定义了a,但我想往a里面放东西,这个东西包括了第一个string、和第二个map容器,其中里面的那个map容器内又必须添加内容;
我需要得到这个操作的具体过程
谢谢! 展开
我需要得到这个操作的具体过程
谢谢! 展开
2015-05-03
展开全部
map(有key和value组成)的遍历,和其它STL的容器一样,都是通过迭代器实现的;因此判断value(而不是key)是否存在,方法一:你可以循环遍历map,然后按照second来取值判断;方法二:当然也可以通过stl中的算法,比如find_if,并配合函数或函数对象来实现。下面的例子, 先输入一个字符串, 然后以空格分割装入<int, string>的map中。 然后循环遍历这个map,打印key和value(同上面的方法一,稍稍比较即可判断某个value是否存在); 然后把两个string写入vector中,然后判断string的值是否map中已存在(例子里面一个存在,另一个不存在),其中的判断,用到了上面提及的方法二。 其它stl类和map的结合,如法炮制即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <map>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
struct FoundByValue
{
FoundByValue(string str):_s(str) {}
bool operator() (const pair<int, string>& v) const
{
return v.second == _s;
}
private:
string _s;
};
int main(int argc, char** argv)
{
char sz[] = "I am a map of int and string.";
string token;
stringstream ss (sz);
map<int, string> mis;
map<int, string>::iterator itmap;
int i;
i = 0;
while (getline(ss, token, ' '))
{
mis[i++] = token;
}
for (itmap = mis.begin(); itmap != mis.end(); ++itmap)
{
cout << (*itmap).first << " " << (*itmap).second << endl;
}
vector<string> vs;
vs.push_back("int");
vs.push_back("float");
for (vector<string>::iterator it = vs.begin(); it != vs.end(); ++it)
{
itmap = find_if(mis.begin(), mis.end(), FoundByValue(*it));
if ( itmap != mis.end())
cout << *it << " already exists." << endl;
else
cout << *it << " is not found." << endl;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <map>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
struct FoundByValue
{
FoundByValue(string str):_s(str) {}
bool operator() (const pair<int, string>& v) const
{
return v.second == _s;
}
private:
string _s;
};
int main(int argc, char** argv)
{
char sz[] = "I am a map of int and string.";
string token;
stringstream ss (sz);
map<int, string> mis;
map<int, string>::iterator itmap;
int i;
i = 0;
while (getline(ss, token, ' '))
{
mis[i++] = token;
}
for (itmap = mis.begin(); itmap != mis.end(); ++itmap)
{
cout << (*itmap).first << " " << (*itmap).second << endl;
}
vector<string> vs;
vs.push_back("int");
vs.push_back("float");
for (vector<string>::iterator it = vs.begin(); it != vs.end(); ++it)
{
itmap = find_if(mis.begin(), mis.end(), FoundByValue(*it));
if ( itmap != mis.end())
cout << *it << " already exists." << endl;
else
cout << *it << " is not found." << endl;
}
return 0;
}
追问
在map<string,int>中是否可以使<"ddd",1>与<"ddd",3>同时存在
2.在map<string,vector<int> >中,能否让<"ddd",vector1>与<"ddd",vector2>同时存在?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询