2012-01-08 26 views
0

即使您尝试通过提供子字符串来查找,Vector查找函数也可以搜索插入的值。这是否与地图的键相同?查找向量中的函数和地图的键

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]]“。

我在地图上试过了,但运行时代码崩溃了。我使用的开发的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(); 

} 
+2

你从来没有使用任何“矢量查找功能”,并且实际上不存在这样的功能。 – 2012-01-08 17:30:26

+0

@KerrekSB ok,所以这是一个Strung查找函数或其他东西,但如果你尝试在地图中有一个键和值作为字符串它不会获取你找到部分字符串的结果在这里作为“[[[”已通过。但是,如果我们只有钥匙,而不是钥匙价值的概念设置为地图,那么这会找到工作吗? – Invictus 2012-01-08 17:33:18

+0

查看Wilx的答案:集合和映射具有不可变的键,所以你只能得到一个'const string&'给他们。 'find'仍然有效,但是'append'不起作用。 – 2012-01-08 17:34:51

回答

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;  
} 

正如其他人所指出的那样,你是感兴趣的vectormap的的find方法。您对string的查找方法感兴趣 - 这是完全不同的。你的问题的标题有一点误导(无意)。

+0

感谢您的可爱解释。对我而言,这是一个很大的错误,我错过了迭代器,并开始在没有它的地图上搜索 – Invictus 2012-01-08 18:23:14

2

std::set<>的问题是,你不能修改其内容的地方,因为你可能会侵犯订购它。但是,您可以使用迭代器(而不是operator[])从set.begin()重复为set.end(),并删除并重新插入修改的元素。

+0

感谢您的建议。但是,如果我传递了我的元素的部分字符串,它将能够在矢量的情况下找到它。那么我可以在那种情况下存储该迭代器并删除它或我想要做的任何操作 – Invictus 2012-01-08 17:35:53

+0

这样的东西 (it4 = m.begin(); it4!= m.end(); it4 ++) { if(m.find(“5”)== 0) it5 = it4; } – Invictus 2012-01-08 17:37:31

+0

任何建议先生? – Invictus 2012-01-08 17:51:10