在向量中查找函数和地图的键

时间:2012-01-08 17:27:27

标签: c++

即使您尝试通过提供子字符串查找,向量查找功能也可以搜索插入的值。如果是地图的键,这是否相同?

   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();

 }

2 个答案:

答案 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的查找方法感兴趣 - 这是完全不同的。你的问题的标题有点误导(无意中)。