map(有key和value组成)的遍历,和其它STL的容器一样,都是通过迭代器实现的;
因此判断value(而不是key)是否存在:
方法一:你可以循环遍历map,然后按照second来取值判断;
方法二:当然也可以通过stl中的算法,比如find_if,并配合函数或函数对象来实现。
下面的例子:
1. 先输入一个字符串, 然后以空格分割装入的map中。
2. 循环遍历这个map,打印key和value(同上面的方法一,稍稍比较即可判断某个value是否存在);
3. 把两个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;
}