Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在作为地图关键点的向量的两个数组中搜索公共元素?_C++_Map_Vector_C++11 - Fatal编程技术网

C++ 如何在作为地图关键点的向量的两个数组中搜索公共元素?

C++ 如何在作为地图关键点的向量的两个数组中搜索公共元素?,c++,map,vector,c++11,C++,Map,Vector,C++11,我有一个地图,它以一个大小为3的向量作为键,以一个字符串作为值。此映射包含大约2000个从文件解析的条目。我需要检查向量1中的每个元素是否存在于向量2中 int index; map<vector<int>,string>::iterator i2; for ( i2=my_map.begin() ; i2 != my_map.end(); i2++) { int id_cnt = (*i2).first.at(0); int prev_cnt = (*

我有一个地图,它以一个大小为3的
向量
作为键,以一个字符串作为值。此映射包含大约2000个从文件解析的条目。我需要检查向量1中的每个元素是否存在于向量2中

int index;
map<vector<int>,string>::iterator i2;

for ( i2=my_map.begin() ; i2 != my_map.end(); i2++)
{
    int id_cnt = (*i2).first.at(0);
    int prev_cnt = (*i2).first.at(1);

    for (index=0; index < my_map.size(); index++)
    {
        if (prev_cnt==id_cnt[index])                     //error
        {
            //code to do something
        }
    }

    cout << "hi" <<endl;
    cout << (*i2).second << endl;
}
我必须检查第1列中的每个数字是否出现在第2列中。因此,对于第1列的第1个元素,第2列中存在4个元素。现在,我取对应的第3列数字(25)并将其放在第20个元素下26个字母的向量中。因为我需要得到对应字符串(wtwt)的最后一个字符。T是第20个字母


我必须对第1列中的元素执行此过程。

建议您在定义映射时也传递比较函数

请看地图的定义


根据您的编辑,我建议您将数据结构更改为以下内容:

struct Entry {
  int next;
  int index;
  string text;
};

typedef map<int, Entry> MyMap;

for(MyMap::iterator i = my_map.begin(); i < my_map.end(); ++i) {
  MyMap::iterator next = my_map.find(i->second.next);
  if(next == my_map.end()) {
    // not found!
    break;
  }
}
struct条目{
int-next;
整数指数;
字符串文本;
};
typedef-map-MyMap;
for(MyMap::iterator i=my_-map.begin();isecond.next);
if(next==my_map.end()){
//没有找到!
打破
}
}

第一列进入下一列,第三列进入索引。第二列是map键。< /p>您试图下标的值是<代码> int <代码>。您想测试两个向量是否相等或是我误解了您吗?如果这是C++中的第一个星期,所有这些都将大大超出您的头脑。忘记你正在显示的C++源代码,或者甚至是问题(如C++中的一个明显的弯曲)。相反,请用英语解释您试图解决的问题。@Xeo:我想测试向量1中的每个值是否存在于向量2中。您想比较哪两个向量?你的循环通过my_映射,其中每个元素都有一个向量,但没有其他向量可以比较。另外,向量作为映射键是个坏主意。我可能会从选择合适的数据结构开始。老实说,这张地图很奇怪……哇,好吧,这很有道理。我会试试这个,让你知道它是如何进行的。我似乎不理解if语句。如果第一列的每个元素都等于最后一个映射条目,那么就找不到它?@sumrania
my_map.end()
不是最后一个映射条目,它是经过最后一个条目的迭代器,如果找不到条目,则返回的是
find
。非常感谢你!!因为你的帮助,我今天学到了很多新东西!这部分工作正常,现在我正在完成代码的其余部分。非常感谢。
struct Entry {
  int next;
  int index;
  string text;
};

typedef map<int, Entry> MyMap;

for(MyMap::iterator i = my_map.begin(); i < my_map.end(); ++i) {
  MyMap::iterator next = my_map.find(i->second.next);
  if(next == my_map.end()) {
    // not found!
    break;
  }
}