我想使用C ++ map函数map::find来确定特定字符串是否在地图中。我知道find返回map::end
,但我不确定如何使用它。因此,如果names_
和info_
中都存在相同的字符串,我希望它将该字符串打印到屏幕上。
在我的标题中:
std::vector<std::string>names_;
std::map<std::string, unsigned int> info_;
在.cpp中(此代码错误):
for(unsigned int i=0;i<names_.size();i++){
std::map<std::string, unsigned int>::iterator it;
it = info_.find(names_[i]);
if info_.find(names_[i]) != info_.end()
std::cout << names_[i] << std::endl;
}
我在.cpp代码snipet中做错了什么?我知道它与迭代器有关。
答案 0 :(得分:3)
除了其他任何事情:
if info_.find(names_[i]) != info_.end()
应该是:
if ( info_.find(names_[i]) != info_.end() )
在C ++(和C)中,ifs和whiles测试的条件必须用parens括起来。
答案 1 :(得分:3)
应该是:
for(unsigned int i=0;i<names_.size();i++){
if (info_.find(names_[i]) != info_.end())
std::cout << names_[i] << std::endl;
}
答案 2 :(得分:1)
如果在其他答案中提到了括号if表达式的明显修复,则代码可以正常工作。
#include <iostream>
#include <map>
#include <vector>
int main() {
std::vector<std::string>names_;
std::map<std::string, unsigned int> info_;
names_.push_back("a");
names_.push_back("b");
names_.push_back("c");
info_["a"] = 123;
info_["c"] = 123;
info_["d"] = 456;
for(unsigned int i=0;i<names_.size();i++){
std::map<std::string, unsigned int>::iterator it;
if (info_.find(names_[i]) != info_.end())
std::cout << names_[i] << std::endl;
}
}
输出:
a
c
这不是你要的吗?