即使您尝试通过提供子字符串查找,向量查找功能也可以搜索插入的值。如果是地图的键,这是否相同?
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]]”。
我在地图上试了但是代码在运行时崩溃了。我正在使用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();
}
答案 0 :(得分:2)
std::set<>
的问题在于您无法修改其元素,因为您可能违反了它的排序。但是,您可以使用迭代器(而不是set.begin()
)从set.end()
迭代到operator[]
并删除并重新插入已修改的元素。
答案 1 :(得分:2)
(在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;
}
正如其他人所指出的那样,您 对<{1}}或find
的{{1}}方法感兴趣。您对vector
的查找方法感兴趣 - 这是完全不同的。你的问题的标题有点误导(无意中)。