如何在向量的2个数组中搜索公共元素,这是地图中的关键?

时间:2012-09-20 18:07:43

标签: c++ map vector c++11

我有一张地图,其中一个大小为3的vector<int>作为键,一个字符串作为值。此映射包含大约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;
}

我得到的错误是:

  

“Susbscripted值不是数组,指针或向量。

我一周以来一直在研究C ++,我什么都不懂! :(

编辑:

我有4列:

4 6 65 gdsg
6 1 64 sggg
1 2 34 wetw
7 4 25 wtwt
8 5 25 heyq
5 7 23 fheh
2 5 12 fetd

我必须检查第1列中的每个数字是否都存在于第2列中。因此,在第1列的第1个元素的情况下:第2列中存在第4个。现在我采用相应的第3列编号(25并将其放在第20个元素下的26个字母的向量中。 20因为我需要得到相应字符串的最后一个字符(wtwt)。 T是第20个字母。

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

2 个答案:

答案 0 :(得分: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;
  }
}

您的第一列接下来,您的第三列进入索引。第二列是地图键。

答案 1 :(得分:0)

建议您在定义地图时也传递比较功能。

请看地图的定义

http://www.cplusplus.com/reference/stl/map/map/