Vector find函数可以搜索插入的值,即使您尝试通过提供子字符串进行查找。对于map的键来说,这是相同的吗?
int main()
{
vector<string> v;
v.push_back("text");
v.push_back("[[text");
v.push_back("text");
for (unsigned i = 0; i < v.size(); i++)
{
if (v[i].find("[[") == 0)
{
v[i].append("]]");
}
}
}在这里,它找到"[[text“并将其设置为"[text]”。
我在map中尝试过,但代码在运行时崩溃。我正在使用Dev c++
int main()
{
std::multimap<string, string> m;
std::multimap<string, string> intersection;
std::multimap<string, string>::iterator it8;
m.insert(pair< string, string>("4-2"," 61-7" ));
m.insert(pair< string, string>("5-2"," 61-7" ));
multimap<string, string>::iterator it4;
multimap<string, string>::iterator it5;
for ( it4 = m.begin(); it4 !=m.end(); it4++)
{
if (m.find("5-") == 0)
it5=it4;
}
cout << " result of 5 search is" << (*it5).first << ", " << (*it5).second <<endl;
m.clear();
getchar();
}发布于 2012-01-09 01:56:38
(ideone上的示例正确代码)
错误是这一行
if (m.find("5-") == 0)永远不会成功。你可能会对此感到惊讶。m.find("5-")搜索整个映射,查找键值恰好等于"5-“的条目。你的钥匙是"4-2“和"5-2”。
是否要查找包含子字符串"5-“的键?然后你需要像这样的东西
it4->first.find("5-"); // check if the key string at this entry contains "5-"我认为你想要一个这样的循环:
multimap<string, string>::iterator it4;
for ( it4 = m.begin(); it4 !=m.end(); it4++)
{
if (it4->first.find("5-") != string :: pos)
cout << " result of 5 search is" << it4->first << ", " << it4->second <<endl;
}正如其他人所指出的,您对vector或map的find方法不感兴趣。您对string的find方法很感兴趣--这是完全不同的。因此,你的问题的标题有点误导(无意中)。
发布于 2012-01-09 01:31:13
std::set<>的问题是您不能就地修改它的元素,因为您可能会违反它的顺序。但是,您可以使用迭代器(而不是operator[])从set.begin()迭代到set.end(),然后删除并重新插入修改过的元素。
https://stackoverflow.com/questions/8779591
复制相似问题