map<int,string>怎么用?
定义了一个map<int,string>,存入很多类似map[1]=str1,map[2]=str2信息,然后怎么判断str3是否在map中呢?或者我想我把很多str类存...
定义了一个map<int,string>,存入很多类似map[1]=str1,map[2]=str2信息,然后怎么判断str3是否在map中呢?或者我想我把很多str类存入map,然后一一遍历str类,该怎么存?怎么用呢?
展开
1个回答
展开全部
map(有key和value组成)的遍历,和其它STL的容器一样,都是通过迭代器实现的;因此判断value(而不是key)是否存在,方法一:你可以循环遍历map,然后按照second来取值判断;方法二:当然也可以通过stl中的算法,比如find_if,并配合函数或函数对象来实现。下面的例子, 先输入一个字符串, 然后以空格分割装入<int, string>的map中。 然后循环遍历这个map,打印key和value(同上面的方法一,稍稍比较即可判断某个value是否存在); 然后把两个string写入vector中,然后判断string的值是否map中已存在(例子里面一个存在,另一个不存在),其中的判断,用到了上面提及的方法二。 其它stl类和map的结合,如法炮制即可。
#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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询