C++ 如何在作为地图关键点的向量的两个数组中搜索公共元素?
我有一个地图,它以一个大小为3的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 = (*
向量作为键,以一个字符串作为值。此映射包含大约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语句。如果第一列的每个元素都等于最后一个映射条目,那么就找不到它?@sumraniamy_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;
}
}