首页 > 解决方案 > multimap中的一键多值问题

问题描述

我正在使用地图解决问题。

我使用多图来拥有一个具有多个值的键来解决这个问题。但是,它不起作用。我认为问题在于当我将元素插入多图时,但我找不到该代码有任何问题。指令如下:您将获得两个单词和字符之间的映射。你的任务是编写一个函数来检查第一个单词是否可以翻译成第二个单词。您需要使用字符映射来破译第一个单词并查看它是否与第二个单词匹配。字符映射可以重复应用于每个字符。“works works”是一个匹配,每个字母都映射到它自己

“out the”是匹配的。首先检查 o 和 t。从给定的映射中,您有 o->c、c->t。然后检查 u 和 h。从映射 u->h。最后检查 t 和 e。从映射 t->e。由于可以解析所有字符,因此 out 和 the 是匹配的。

“好虫”不配。首先检查g和w,g不映射到w。在第一次出现字符不映射时,您可以断定它不匹配。我的问题是当 t 映射到两个单词 e、f 时。而且我的代码没有通过它的测试-> 谢谢

int checkmatch(char x, char y, std::multimap<char,char>mapp){
   if (x == y) return 1;
   while (mapp.find(x) != mapp.end()){
      if(mapp.find(x)->second==y)
         return 1;
      else
         x=mapp.find(x)->second;
      }   
      return 0;
}

bool wordsMatch( std::vector<std::pair<char, char>> & mappings, std::string leftWord, std::string rightWord ){
   // Your code goes here
   std::multimap<char,char> mapp;
   std::vector<char>value;
   int n=mappings.size();
   int result=0;
   char p1[leftWord.length()], p2[rightWord.length()];
   for(int i=0; i<n; i++){
      mapp.insert(std::pair<char,char>(mappings[i].first, mappings[i].second));  
   }
   if (leftWord.length() != rightWord.length()){
      return false;}

   for(int i=0; i<leftWord.length();i++){
      p1[i]=leftWord[i];
      p2[i]=rightWord[i];}
   for(int i=0; i<leftWord.length();i++){
      result +=checkmatch(p1[i],p2[i], mapp);  
   }
   if (result == leftWord.length())
      return true;
   else
      return false;

}

标签: c++

解决方案


推荐阅读