展开全部
map(有key和value组成)的遍历,和其它62616964757a686964616fe4b893e5b19e31333332623262STL的容器一样,都是通过迭代器实现的;因此判断value(而不是key)是否存在,方法一:你可以循环遍历map,然后按照second来取值判断;方法二:当然也可以通过stl中的算法,比如find_if,并配合函数或函数对象来实现。下面的例子, 先输入一个字符串, 然后以空格分割装入的map中。 然后循环遍历这个map,打印key和value(同上面的方法一,稍稍比较即可判断某个value是否存在); 然后把两个string写入vector中,然后判断string的值是否map中已存在(例子里面一个存在,另一个不存在),其中的判断,用到了上面提及的方法二。 其它stl类和map的结合,如法炮制即可。#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct FoundByValue
{
FoundByValue(string str):_s(str) {}
bool operator() (const pair& 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 mis;
map::iterator itmap;
int i;
i = 0;
while (getline(ss, token, ' '))
{
mis[i++] = token;
}
for (itmap = mis.begin(); itmap != mis.end(); ++itmap)
{
cout <
}
vector vs;
vs.push_back("int");
vs.push_back("float");
for (vector::iterator it = vs.begin(); it != vs.end(); ++it)
{
itmap = find_if(mis.begin(), mis.end(), FoundByValue(*it));
if ( itmap != mis.end())
cout <
else
cout <
}
return 0;
}